Der erste Schritt wäre das Kopieren der Verzeichnisstruktur:
sdir="/path/to/source/dir" tdir="/path/to/target/dir" cd "$sdir" find . -type d -exec mkdir -p "$tdir"/{} \;
Möglicherweise möchten Sie mehr tun, z. B. Berechtigungen zum Kopieren:
find . -type d -exec chmod --reference={} "$tdir"/{} \;
(Hinweis: --reference
wird von POSIX nicht benötigt).
Oder anstelle von mkdir
Ihnen können Sie cp -a --attributes-only
(auch Nicht-POSIX) verwenden:
# this assumes $tdir doesn't yet exist but its future parent does cp -a "$sdir" "$tdir"
Entfernen Sie dann alle Nicht-Verzeichnisse aus $tdir
und belassen Sie die leere Verzeichnisstruktur:
# make sure "$tdir" is what it should be find "$tdir" ! -type d -delete
Wenn Sie nun über die Zielverzeichnisstruktur verfügen, arbeiten Sie mit den Dateien. Wenn Sie keine Pipes, Umleitungen usw. benötigen, können Sie mit diesem Beispiel vorgehen:
cd "$sdir" find . -type f -exec ffmpeg -i {} -c:v libx264 -crf 23 -c:a copy "$tdir"/{} \; # source ^^ target ^^^^^^^^^^
Wenn Sie Pipes oder Umleitungen benötigen, benötigen Sie eine Shell, um sie zu handhaben:
cd "$sdir" find . -type f -exec sh -c 'head -n 10 "$1" >"$2"/"$1"' sh-find {} "$tdir" \; # for sh these are $0:^^^^^^^, $1:^^, $2:^^^^^
Das Ausführen einer separaten Shell für jede Datei ist langsam, aber Sie können praktisch alles tun.