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 {} +