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