Причина, яку люди використовують xargs
у поєднанні з знахідкою, полягає в тому, що кілька імен файлів будуть передані одній і тій самій виклику програми будь-якого xargs
запуску програми . Наприклад, якщо find
повертає файли foo , bar та baz , наступне буде виконано mv
лише один раз:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
Ефективно, він називає mv
наступне:
mv -t destDir foo bar baz
Якщо вам не потрібна або хочете такої поведінки (як я припускаю, це справа в цьому випадку), ви можете просто використовувати find
s -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/… .