Powodem, dla którego ludzie używają xargs
w połączeniu z find, jest to, że wiele nazw plików zostanie przekazanych do tego samego wywołania programu niezależnie od xargs
uruchomionego programu . Na przykład, jeśli find
zwraca pliki foo , bar i baz , następujące działania będą działać mv
tylko raz:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
Skutecznie wywołuje mv
nastę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.sh
i 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 ffmpeg
z odpowiednimi argumentami.
xargs
ogólnie mogą chcieć sprawdzić stackoverflow.com/questions/3770432/… .