xargs
नौकरी के लिए उपकरण है। वह, या find
साथ -exec … {} +
। ये उपकरण कई बार एक कमांड चलाते हैं, जिसमें एक ही बार में कई तर्क दिए जा सकते हैं।
चर तर्क सूची अंत में होने पर दोनों तरीकों को अंजाम देना आसान होता है, जो यहाँ नहीं है: अंतिम तर्क mv
गंतव्य है। जीएनयू उपयोगिताओं (यानी गैर-एम्बेडेड लिनक्स या सिग्विन पर) के साथ, गंतव्य को पहले पारित करने के लिए, -t
विकल्प mv
उपयोगी है।
यदि फ़ाइल के नाम में कोई व्हाट्सएप नहीं है और न ही कोई है \"'
, तो आप केवल इनपुट के रूप में फ़ाइल नाम प्रदान कर सकते हैं xargs
( echo
कमांड एक बैश बिलिन है, इसलिए यह कमांड लाइन की लंबाई सीमा के अधीन नहीं है):
echo !(*.jpg|*.png|*.bmp) | xargs mv -t targetdir
आप डिफ़ॉल्ट उद्धृत प्रारूप के बजाय नल-सीमांकित इनपुट का उपयोग -0
करने के विकल्प का उपयोग कर सकते हैं xargs
।
printf '%s\0' !(*.jpg|*.png|*.bmp) | xargs -0 mv -t targetdir
वैकल्पिक रूप से, आप फ़ाइल नामों की सूची जनरेट कर सकते हैं find
। उपनिर्देशिकाओं में पुनरावृत्ति से बचने के लिए, का उपयोग करें -type d -prune
। चूंकि सूचीबद्ध छवि फ़ाइलों के लिए कोई कार्रवाई निर्दिष्ट नहीं है, केवल अन्य फाइलें स्थानांतरित की जाती हैं।
find . -name . -o -type d -prune -o \
-name '*.jpg' -o -name '*.png' -o -name '*.bmp' -o \
-exec mv -t targetdir/ {} +
(इसमें शेल वाइल्डकार्ड विधियों के विपरीत डॉट फाइलें शामिल हैं।)
यदि आपके पास GNU उपयोगिताओं नहीं है, तो आप सही क्रम में तर्क प्राप्त करने के लिए एक मध्यवर्ती शेल का उपयोग कर सकते हैं। यह विधि सभी POSIX सिस्टम पर काम करती है।
find . -name . -o -type d -prune -o \
-name '*.jpg' -o -name '*.png' -o -name '*.bmp' -o \
-exec sh -c 'mv "$@" "$0"' targetdir/ {} +
Zsh में, आप लोड कर सकते हैं mv
निर्मित :
setopt extended_glob
zmodload zsh/files
mv -- ^*.(jpg|png|bmp) targetdir/
या यदि आप जाने देना पसंद करते हैं mv
और अन्य नाम बाहरी आदेशों का उल्लेख करते रहते हैं:
setopt extended_glob
zmodload -Fm zsh/files b:zf_\*
zf_mv -- ^*.(jpg|png|bmp) targetdir/
या क्ष-शैली के दस्ताने के साथ:
setopt ksh_glob
zmodload -Fm zsh/files b:zf_\*
zf_mv -- !(*.jpg|*.png|*.bmp) targetdir/
वैकल्पिक रूप से, GNU mv
और का उपयोग कर zargs
:
autoload -U zargs
setopt extended_glob
zargs -- ./^*.(jpg|png|bmp) -- mv -t targetdir/