ย้ายไฟล์ทั้งหมดจากไดเรกทอรีย่อยไปยังไดเรกทอรีปัจจุบันหรือไม่


14

ฉันจะย้ายไฟล์ที่มีอยู่ในไดเรกทอรีย่อยทั้งหมดไปยังไดเรกทอรีปัจจุบันแล้วลบไดเรกทอรีย่อยที่ว่างเปล่าได้อย่างไร

ฉันพบคำถามนี้แต่ปรับคำตอบเป็น:

mv * .

ไม่ทำงาน; ฉันได้รับคำเตือนมากมายที่ดูเหมือนว่า:

mv: wil and ./wil are identical

ไฟล์ที่อยู่ในไดเรกทอรีย่อยมีชื่อเฉพาะ

คำตอบ:


23

คุณยังสามารถใช้-mindepthตัวเลือก:

find . -type f -mindepth 2 -exec mv -i -- {} . \;

(ร่วมกับ-maxdepthคุณสามารถ จำกัด ระดับลำดับชั้นที่จะเก็บไฟล์)

ฉันใช้mv -i(“ โต้ตอบ”) เพื่อmvสอบถามก่อนเขียนทับไฟล์ ด้วยไดเรกทอรีย่อยจำนวนมากอาจมีการปะทะกันของชื่อที่คุณต้องการเตือน

--ตัวเลือกที่จะหยุดการประมวลผลตัวเลือกจึงmvไม่ได้รับการสับสนโดยชื่อไฟล์ที่เริ่มต้นด้วยยัติภังค์

ทำความสะอาดทั้งไดเรกทอรีย่อยที่ว่างเปล่าด้วย

find . -depth -mindepth 1 -type d -empty -exec rmdir {} \;

มีวิธีข้ามคำถามสำหรับการเขียนทับไฟล์โดยไม่เขียนทับไฟล์หรือไม่?
Filnor

2
ตัวเลือกสำหรับ mv:: -n, --no-clobberอย่าเขียนทับไฟล์ที่มีอยู่ คุณอาจสนใจ-b, --backupเช่นกัน
Florian Jenn

5

ลองสิ่งนี้:

find ./*/* -type f -print0 | xargs -0 -J % mv % .

ข้อมูลเพิ่มเติม: ลองค้นหาตามลำพังเพียงอย่างเดียวก็ควรให้รายการพร้อมไฟล์ทั้งหมดที่คุณต้องการย้าย (ให้ออก-print0) ตัวอย่าง:

probe:test trurl$ find ./*/* -type f
./test_s/test_s_s/testf4
./test_s/test_s_s/testf5
./test_s/testf1
./test_s/testf2
./test_s/testf3
./test_s2/testf6
./test_s2/testf7

ด้วย-print0และxargsตอนนี้คุณกำลังสร้างรายการคำสั่งที่จะดำเนินการ การ-J %ตั้งค่าสถานะหมายถึงแทรกองค์ประกอบรายการที่นี่ดังนั้นmv $FILE .จะถูกดำเนินการสำหรับทุกไฟล์ที่พบ

ด้านบนใช้งานได้กับ BSD xargs หากคุณใช้ GNU-version (Linux) -I %แทน-J %



0
mv */* .

มันจะย้ายไฟล์ทั้งหมดจากไดเรกทอรีย่อยทั้งหมดไปยังไดเรกทอรีปัจจุบัน

หากคุณต้องการล้างข้อมูลคุณสามารถใช้

find . -type d -empty -delete

มันจะลบไดเรกทอรีย่อยที่ว่างเปล่าทั้งหมด


-2

เคล็ดลับง่ายๆ 1 ข้อใช้งานได้เฉพาะเมื่อไฟล์ของคุณมีส่วนขยาย (มีจุด)

mv *.* subdir/
mv .* subdir/

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