ใน zsh:
mv dir1/*/**/*(.D) dir1
**/
สำรวจเส้นทางไดเรกทอรีย่อยซ้ำ ตัวระบุคุณสมบัติกลม .
จับคู่ไฟล์ปกติเท่านั้นและD
ทำให้แน่ใจว่ามีไฟล์ dot รวมอยู่ (โดยค่าเริ่มต้นไฟล์ที่ชื่อขึ้นต้นด้วย a .
จะถูกแยกออกจากการจับคู่สัญลักษณ์แทน) ในการทำความสะอาดไดเรกทอรีตอนนี้ว่างเปล่าหลังจากนั้นวิ่งrmdir dir1/**/*(/Dod)
- /
จำกัด ไปยังไดเรกทอรีและod
สั่งลึกการแข่งขันครั้งแรกเพื่อให้เป็นไปลบก่อนdir1/dir2/dir3
dir1/dir2
หากความยาวทั้งหมดของชื่อไฟล์มีขนาดใหญ่มากคุณอาจพบข้อ จำกัด เกี่ยวกับความยาวบรรทัดคำสั่ง Zsh มี builtins สำหรับmv
และrmdir
ไม่ได้รับผลกระทบจากข้อ จำกัด นี้: เรียกใช้zmodload zsh/files
เพื่อเปิดใช้งาน
ด้วยเครื่องมือ POSIX เท่านั้น:
find dir1 -type f -exec mv {} dir1 \;
find dir1 -depth -exec rmdir {} \;
หรือ (เร็วขึ้นเพราะไม่จำเป็นต้องเรียกใช้กระบวนการแยกต่างหากสำหรับแต่ละไฟล์)
find dir1 -type f -exec sh -c 'mv "$@" dir1' _ {} +
find dir1 -depth -exec rmdir {} +