ย้ายเนื้อหาของโฟลเดอร์ขึ้นหนึ่งระดับ


127

ฉันมีไดเรกทอรีที่ไม่ได้แพ็ค แต่อยู่ในโฟลเดอร์ ฉันจะย้ายเนื้อหาขึ้นหนึ่งระดับได้อย่างไร ฉันกำลังเข้าถึง CentOS ผ่าน SSH

คำตอบ:


189

ด้วยโฟลเดอร์ชื่อ 'myfolder' และเพิ่มขึ้นหนึ่งระดับในลำดับชั้นของไฟล์ (จุดที่คุณต้องการใส่) คำสั่งจะเป็น:

mv myfolder/* .

ตัวอย่างเช่นหากข้อมูลอยู่ใน/home/myuser/myfolderนั้นจากการ/home/myuser/เรียกใช้คำสั่ง


35
คุณอาจต้องจับคู่.*ไม่ใช่เฉพาะ*ไฟล์เก็บถาวรที่มีไฟล์ดอท นอกจากนี้ยังเพิ่ม `&& rmdir myfolder` ไปยังท้าย o เพื่อลบโฟลเดอร์ที่ไม่เกี่ยวข้องตอนนี้ นี่คือการบันทึกเพราะมันจะทำงานเฉพาะถ้า mv กลับมาประสบความสำเร็จและเพราะ rmdir จะไม่ลบไดเรกทอรีที่ไม่ว่างเปล่า
คาเลบ

.*จุดที่ดีใน การลบโฟลเดอร์ดั้งเดิมนั้นมีทั้งเรื่องเล็กน้อยและไม่ถูกถามดังนั้นเราจะให้ OP จัดการกับเขา / เธอ
Rudu

1
@Caleb เป็นไปได้ไหมที่จะเขียนทั้งสอง*และ.*ในหนึ่งบรรทัด? เพียงแค่อยากรู้อยากเห็น
Richard

2
@ Richard ใช่มันเป็น อาร์กิวเมนต์mvทั้งหมดจะเป็นแหล่งที่มายกเว้นอาร์กิวเมนต์ LAST ที่ต้องเป็นเป้าหมายในการย้าย (และในกรณีที่มีหลายแหล่งจะต้องเป็นโฟลเดอร์)
Caleb

1
ฉันกำลังทุบตี:/bin/mv: Argument list too long
dragosrsupercool

26

เพียงเพื่อให้ชัดเจนจากคำตอบของ Rudu ข้างต้นและความคิดเห็น

หากคุณต้องการย้ายเนื้อหาทั้งหมดรวมถึงไฟล์ที่ขึ้นต้นด้วย (เช่น. htaccess, .git ฯลฯ ) คุณต้องรวมทั้ง * และ. * ไว้ในคำสั่งของคุณ ชอบมาก

 mv subfolder/* subfolder/.* .

ที่จะย้ายเนื้อหาของโฟลเดอร์ย่อยไปยังโฟลเดอร์ปัจจุบันของคุณ สังเกตช่องว่างก่อน "." ล่าสุด


มันใช้งานได้ แต่ฉันได้รับmv: rename fake/. to ./.: Invalid argumentและmv: rename fake/.. to ./..: Invalid argument
Maslow

16

นี่เป็นไปได้ด้วยวิธีการดังต่อไปนี้:

  • การใช้rsync:

    rsync -vua --delete-after foo/ .
  • การใช้cpและrmdir:

    cp -vaR foo/. . && rmdir foo/
  • การใช้mv(พร้อมdotglobตัวเลือกเปิดใช้งาน):

    shopt -s dotglob # Includes filenames beginning with a dot.
    mv -- foo/* .    # Where foo/ is the folder consisting the files.
    shopt -u dotglob # Disables previously enabled dotglob option.
    

    foo/โฟลเดอร์ของคุณอยู่ที่ไหนซึ่งเนื้อหาจะถูกเลื่อนขึ้นหนึ่งระดับ

    ดู: และhelp shoptman bash

  • การใช้mv(ตามที่แนะนำที่นี่ ):

    mv foo/* foo/.[^.]* . && rmdir foo/

    หมายเหตุ: foo/..bar..มันจะพลาดไฟล์ที่เรียกว่า

    หมายเหตุ: สำหรับเปลือกหอย POSIX [!.]คุณจะต้อง


สิ่งที่สวิทช์ rsync -v, -u, -aและ-rทำ? AFAICT -vเป็น verbose ซึ่งทำให้ rsync พิมพ์ข้อมูลเพิ่มเติม -uหมายถึงอัปเดต - คัดลอกไฟล์เฉพาะในกรณีที่ใหม่กว่า ดูเหมือนจะไม่เกี่ยวข้องกัน -aหมายถึงเก็บถาวร สิ่งนั้นจะเป็นการคัดลอกเจ้าของและการอนุญาตของไฟล์และทำการซิงค์ซ้ำ -rหมายถึงการเรียกซ้ำ -aแต่ที่กล่าวมาแล้วโดย
rjmunro

-uมีประโยชน์เมื่อคุณไม่ต้องการใช้เวลาพิเศษในการย้ายข้อมูลซึ่งมีอยู่แล้ว (โดยเฉพาะอุปกรณ์จัดเก็บข้อมูลที่ช้า) ฉันได้ลบ-rเนื่องจากมีการครอบคลุมตาม-aที่คุณพูดถึง
kenorb

1
mv foo/* foo/.[^.]* .จะพลาดไฟล์ที่เรียกว่าfoo/..bar..เช่น โปรดทราบว่าสำหรับเปลือกหอย POSIX [!.]คุณจะต้อง
Stéphane Chazelas

ควรกล่าวถึงซึ่งrsync -vua --delete-after foo/ .จะลบทุกสิ่งที่อาจมีอยู่แล้วในไดเรกทอรีปัจจุบัน
David

7

แค่ออกคำสั่ง mv

mv (directory)/* .

ถ้าคุณต้องการลบไดเรกทอรีจากนั้นเพิ่ม

rm -rf (directory)

สมมติว่าคุณอยู่ในไดเรกทอรีหลักของ (ไดเรกทอรี)

หากคุณอยู่ใน (ไดเรกทอรี) แล้ว

mv * ../

13
เคล็ดลับความปลอดภัยเพิ่มเติม: เมื่อลบไดเรกทอรีที่คุณรู้ว่าควรว่างเปล่าให้rmdirบ่นและออกหากไดเรกทอรีนั้นไม่ว่างเปล่าในขณะที่rm -rแทนที่จะลบไดเรกทอรีและเนื้อหาทั้งหมด (มันเป็นpoka-yoke .)
Anko

จุดที่ดี! ฉันไม่สามารถคิดเหตุผลที่จะไม่ทำอย่างนั้น
Mark Lalor

@MarkLalor เหตุผลหนึ่งอาจมีไฟล์ที่ซ่อนอยู่เช่นแพร่หลาย.DS_storeใน macOS mvคำสั่งดังกล่าวจะไม่ย้ายผู้ (ไม่รวมdotglobชุด)
AkselA

0

สำหรับผู้ที่อยู่ในเซิร์ฟเวอร์ที่ใช้ร่วมกันคุณจะต้องใช้สิ่งนี้

เพื่อย้ายไฟล์

mv -v ~/public_html/public_html/* ~/public_html/

เพื่อคัดลอกไฟล์

cp -a ~/public_html/public_html/* ~/public_html/


2
คำถามข้างต้นถามเกี่ยวกับการย้ายไม่คัดลอกเนื้อหา การทำเช่นนี้จะเป็นการทำซ้ำไฟล์โดยการปล่อยต้นฉบับไว้ในโฟลเดอร์ย่อย นอกจากนี้ยังเป็นเซิร์ฟเวอร์ "ที่ใช้ร่วมกัน" หรือไม่ได้มีส่วนเกี่ยวข้องกับสิ่งนี้
คาเลบ

1
ที่เหมาะสมและนี่คือคำตอบของคุณสำหรับมัน ...
ริคาร์โด้หายนะ

2
การแก้ไขของคุณอีกครั้ง: วิธีการที่แตกต่างกันที่คำตอบ upvoted แล้ว ? และ "เซิร์ฟเวอร์ที่ใช้ร่วมกัน" ต้องทำอะไรกับมัน โปรดแก้ไขเพื่ออธิบายรายการเหล่านี้หากนี่จะเป็นการสนับสนุนที่มีประโยชน์ซึ่งจะเพิ่มมูลค่าให้กับสิ่งที่มีอยู่แล้วที่นี่
คาเลบ

1
ฉันไม่เห็นด้วยเกี่ยวกับเซิร์ฟเวอร์ที่ใช้ร่วมกันไม่มีอะไรเกี่ยวข้องกับมัน วิธีการ "ผบ" ถูกป้อนทำให้โลกของความแตกต่าง ..
ริคาร์โด้หายนะ

1
เพื่อนทำไมคุณบ้าจัง ... ว้าว .. ฉันแค่แบ่งปันความรู้เล็กน้อย เราทุกคนต่างเข้าใจและเผชิญหน้ากับปัญหาทางเทคนิคที่แตกต่างกัน ... ขอให้คุณมีวันที่ดี Caleb ..
Ricardo Havoc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.