Antworten:
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)
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.
$ cd directory
$ for dir in `ls`; do tar -cvzf ${dir}.tar.gz ${dir}; done
Wenn Sie mehr als nur Verzeichnisse im Verzeichnis haben (dh auch Dateien, da ls alles im Verzeichnis zurückgibt), verwenden Sie Folgendes:
$ cd directory
$ for dir in `find . -maxdepth 1 -type d | grep -v "^\.$" `; do tar -cvzf ${dir}.tar.gz ${dir}; done
Das grep -v schließt das aktuelle Verzeichnis aus, das find
standardmäßig im Befehl angezeigt wird.
for dir in *