Причина, по которой люди используют 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
с соответствующими аргументами.
xargs
вообще возможно , захотите проверить stackoverflow.com/questions/3770432/... .