लोगों 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/… से देख सकते हैं ।