यदि आप एक निर्देशिका पदानुक्रम के अंदर सभी फ़ाइलों को एकल गंतव्य निर्देशिका में, ≥4 (अपने shopt -s globstar
में रखना ~/.bashrc
) या zsh में ले जाना चाहते हैं:
mkdir ~/new-directory
mv -i **/*.xxx ~/new-directory
अन्य गोले में:
mkdir ~/new-directory
find . -name '*.xxx' -exec mv -i {} ~/new-directory \;
इस find
कमांड को कैसे पढ़ें :
.
: वर्तमान निर्देशिका को पार करना
-name '*.xxx'
: उन फाइलों पर कार्य करें जिनके नाम इस पैटर्न से मेल खाते हैं
-exec … \;
: प्रत्येक फ़ाइल पर इस कमांड को निष्पादित करें, फ़ाइल के {}
लिए पथ द्वारा प्रतिस्थापित
find
यदि आपके पास बहुत सी फाइलें हैं, तो इसका उपयोग करने के लिए एक अधिक जटिल कमांड है, क्योंकि इसके mv
लिए प्रत्येक फाइल के लिए एक अलग प्रक्रिया लागू करने की आवश्यकता नहीं है :
find . -name '*.xxx' -exec sh -c 'mv -i "$@" "$0"' ~/new-directory {} +
+
अंत में बताता है find
एक समय में एक से अधिक फ़ाइलों पर आदेश को लागू करने की। चूँकि find
केवल कमांड लाइन के अंत में फ़ाइल नाम रख सकते हैं, और mv
गंतव्य निर्देशिका को अंतिम रूप देने की आवश्यकता है, हम तर्कों को पुनर्व्यवस्थित करने के लिए एक मध्यवर्ती शेल का उपयोग करते हैं (शेल के लिए "$0"
पहला तर्क है ~/new-directory
, और "$@"
बाद के तर्क हैं) find
का विस्तार {}
)।