Powodem, dla którego ludzie używają xargsw połączeniu z find, jest to, że wiele nazw plików zostanie przekazanych do tego samego wywołania programu niezależnie od xargsuruchomionego programu . Na przykład, jeśli findzwraca pliki foo , bar i baz , następujące działania będą działać mvtylko raz:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
Skutecznie wywołuje mvnastępujące czynności:
mv -t destDir foo bar baz
Jeśli nie potrzebujesz lub nie chcesz tego zachowania (jak zakładam, tak jest tutaj), możesz po prostu użyć find's' -exec.
W takim przypadku łatwym rozwiązaniem byłoby napisanie krótkiego skryptu powłoki, takiego jak:
#!/usr/bin/env bash
[[ -f "$1" ]] || { echo "$1 not found" ; exit 1 ; }
P="$1"
F="$( basename $P )"
ffmpeg -i "$P" -f flv "$F"
Zapisz jako myffmpeg.shi uruchom chmod +x myffmpeg.sh. Następnie uruchom następujące polecenie:
find . -iname "*.mov" -exec /path/to/myffmpeg.sh {} \;
Spowoduje to wywołanie skryptu powłoki raz dla każdego znalezionego pliku. Z kolei skrypt powłoki wyodrębnia nazwę pliku z pełnej ścieżki i wywołuje ffmpegz odpowiednimi argumentami.
xargsogólnie mogą chcieć sprawdzić stackoverflow.com/questions/3770432/… .