लोगों xargs
को खोजने के साथ संयोजन में उपयोग करने का कारण यह है कि जो भी प्रोग्राम xargs
लॉन्च करता है , उसी प्रोग्राम के कई फ़ाइल नामों को पास किया जाएगा । उदाहरण के लिए, यदि find
फ़ाइल foo , बार और बाज लौटाता है , तो निम्नलिखित mv
केवल एक बार चलेगा :
find sourceDir [...] -print0 | xargs -0 mv -t destDir
प्रभावी रूप से, यह mv
निम्नलिखित की तरह कहता है :
mv -t destDir foo bar baz
आप की जरूरत नहीं है या इस व्यवहार चाहते हैं (जैसा कि मुझे लगता है यहाँ मामला है), तो आप बस का उपयोग कर सकते find
है -exec
।
इस मामले में, एक आसान समाधान निम्नलिखित की तरह एक छोटी शेल स्क्रिप्ट लिखना होगा:
#!/usr/bin/env bash
[[ -f "$1" ]] || { echo "$1 not found" ; exit 1 ; }
P="$1"
F="$( basename $P )"
ffmpeg -i "$P" -f flv "$F"
के रूप में सहेजें myffmpeg.sh
और चलाएँ chmod +x myffmpeg.sh
। फिर, निम्नलिखित चलाएँ:
find . -iname "*.mov" -exec /path/to/myffmpeg.sh {} \;
यह मिली हुई प्रत्येक फ़ाइल के लिए एक बार शेल स्क्रिप्ट का आह्वान करेगा। बदले में शेल स्क्रिप्ट फ़ाइल पथ को पूर्ण पथ से निकालती है, और ffmpeg
उपयुक्त तर्कों के साथ कॉल करती है।
xargs
सामान्य रूप से कई तर्कों के बारे में एक उत्तर की तलाश कर रहे हैं, जिन्हें आप stackoverflow.com/questions/3770432/… से देख सकते हैं ।