Причина, по которой люди используют xargs
в сочетании с find, заключается в том, что несколько имен файлов будут переданы в один и тот же вызов программы независимо от того, какая программа запускает 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
с соответствующими аргументами.