Zsh में:
mv dir1/*/**/*(.D) dir1
**/अनुक्रमणिका को आवर्ती रूप से हटा देता है। ग्लोब क्वालीफायर . केवल नियमित रूप से फ़ाइलों का मिलान, और Dसुनिश्चित करता है कि डॉट फ़ाइलें शामिल किए गए हैं (डिफ़ॉल्ट, फ़ाइलें जिसका नाम शुरू होता है एक साथ द्वारा .वाइल्डकार्ड से बाहर रखा गया मेल खाता है)। बाद में खाली निर्देशिकाओं को साफ करने के लिए, चलाएं rmdir dir1/**/*(/Dod)- /निर्देशिकाओं पर प्रतिबंध लगाता है, और odमैचों को गहराई से ऑर्डर करता है ताकि dir1/dir2/dir3पहले हटा दें dir1/dir2।
यदि फ़ाइल नामों की कुल लंबाई बहुत बड़ी है, तो आप कमांड लाइन की लंबाई पर सीमा में चल सकते हैं। Zsh के पास बिल्डिंस हैं 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 {} +