Wie kann ich Unterverzeichnisse in separate Archive komprimieren?
Beispiel:
directory
subdir1
subdir2
Sollte Unterverzeichnis1 (.tar) .gz und Unterverzeichnis2 (.tar) .gz erstellen
Dieses kleine Skript scheint Ihre beste Option zu sein, wenn Sie folgende Anforderungen haben:
cd directory
for dir in */
do
base=$(basename "$dir")
tar -czf "${base}.tar.gz" "$dir"
done
Es behandelt Verzeichnisse mit Leerzeichen in ihren Namen ordnungsgemäß.
Wie wäre es damit:
find * -maxdepth 0 -type d -exec tar czvf {}.tar.gz {} \;
Erläuterung: Sie führen eine Suche für alle Elemente im aktuellen Verzeichnis durch. Maxdepth 0 führt dazu, dass der Rekurs nicht niedriger ist als die angegebenen Argumente. (In diesem Fall * oder alle Elemente in Ihrem aktuellen Verzeichnis) Das Argument 'd' für "-type" stimmt nur mit Verzeichnissen überein. Dann führt exec tar für alle Übereinstimmungen aus. ({} wird durch die passende Datei ersetzt)
quelle
for dir in `find * -maxdepth 0 -type d`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Dadurch wird für jede Datei in einem Verzeichnis mit dem Namen blah eine Datei mit dem Namen blah.tar.gz erstellt.
Wenn Sie mehr als nur Verzeichnisse im Verzeichnis haben (dh auch Dateien, da ls alles im Verzeichnis zurückgibt), verwenden Sie Folgendes:
Das grep -v schließt das aktuelle Verzeichnis aus, das
find
standardmäßig im Befehl angezeigt wird.quelle
for dir in *