Der Grund, den die Benutzer xargs
in Kombination mit find verwenden, besteht darin, dass bei jedem Programmstart mehrere Dateinamen an denselben Programmaufruf übergeben werden xargs
. Wenn beispielsweise find
die Dateien foo , bar und baz zurückgegeben werden , wird Folgendes mv
nur einmal ausgeführt:
find sourceDir [...] -print0 | xargs -0 mv -t destDir
Tatsächlich lautet der Aufruf mv
wie folgt:
mv -t destDir foo bar baz
Wenn Sie dieses Verhalten nicht benötigen oder wollen (wie ich hier annehme), können Sie einfach find
's verwenden -exec
.
In diesem Fall besteht eine einfache Lösung darin, ein kurzes Shell-Skript wie das folgende zu schreiben:
#!/usr/bin/env bash
[[ -f "$1" ]] || { echo "$1 not found" ; exit 1 ; }
P="$1"
F="$( basename $P )"
ffmpeg -i "$P" -f flv "$F"
Speichern unter myffmpeg.sh
und ausführen chmod +x myffmpeg.sh
. Führen Sie dann Folgendes aus:
find . -iname "*.mov" -exec /path/to/myffmpeg.sh {} \;
Dadurch wird das Shell-Skript für jede gefundene Datei einmal aufgerufen. Das Shell-Skript extrahiert wiederum den Dateinamen aus dem vollständigen Pfad und ruft ffmpeg
mit den entsprechenden Argumenten auf.
xargs
im Allgemeinen suchen, möchten vielleicht stackoverflow.com/questions/3770432/… .