ใน zsh:
mv dir1/*/**/*(.D) dir1
**/สำรวจเส้นทางไดเรกทอรีย่อยซ้ำ ตัวระบุคุณสมบัติกลม .จับคู่ไฟล์ปกติเท่านั้นและDทำให้แน่ใจว่ามีไฟล์ dot รวมอยู่ (โดยค่าเริ่มต้นไฟล์ที่ชื่อขึ้นต้นด้วย a .จะถูกแยกออกจากการจับคู่สัญลักษณ์แทน) ในการทำความสะอาดไดเรกทอรีตอนนี้ว่างเปล่าหลังจากนั้นวิ่งrmdir dir1/**/*(/Dod)- /จำกัด ไปยังไดเรกทอรีและodสั่งลึกการแข่งขันครั้งแรกเพื่อให้เป็นไปลบก่อนdir1/dir2/dir3dir1/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 {} +