Ich habe ein einziges Verzeichnis, das Dutzende von Verzeichnissen enthält.
Ich bin neu in der Befehlszeile und habe Mühe, einen Befehl zu finden, der jedes Unterverzeichnis in eine eindeutige sub-directory.zip-Datei komprimiert.
Am Ende wird mein primäres Verzeichnis also mit all meinen ursprünglichen Unterverzeichnissen gefüllt, plus der entsprechenden .zip
Dateien, die den gezippten Inhalt jedes Unterverzeichnisses enthalten.
Ist so etwas möglich? Wenn ja, zeigen Sie mir bitte, wie es gemacht wird.
Akzeptierte Antwort:
Sie können diese Schleife in bash
verwenden :
for i in */; do zip -r "${i%/}.zip" "$i"; done
i
ist der Name der Schleifenvariable. */
bedeutet jedes Unterverzeichnis des aktuellen Verzeichnisses und enthält einen abschließenden Schrägstrich in diesen Namen. Stellen Sie sicher, dass Sie cd
an die richtige Stelle, bevor Sie dies ausführen. "$i"
benennt einfach dieses Verzeichnis, einschließlich abschließendem Schrägstrich. Die Anführungszeichen stellen sicher, dass Leerzeichen im Verzeichnisnamen keine Probleme verursachen. ${i%/}
ist wie $i
aber ohne abschließenden Schrägstrich, damit Sie daraus den Namen der ZIP-Datei zusammensetzen können.
Wenn Sie sehen möchten, wie das funktioniert, fügen Sie ein echo
ein vor dem zip
und Sie werden sehen, dass die Befehle gedruckt statt ausgeführt werden.
Parallele Ausführung
Um sie parallel auszuführen, können Sie &
verwenden :
for i in */; do zip -0 -r "${i%/}.zip" "$i" & done; wait
Wir verwenden wait
um der Shell mitzuteilen, dass sie warten soll, bis alle Hintergrundaufgaben abgeschlossen sind, bevor sie beendet wird.
Beachten Sie, dass Sie Ihren Computer überlasten können, wenn Sie zu viele Ordner in Ihrem aktuellen Verzeichnis haben, da dieser Code die Anzahl paralleler Aufgaben nicht begrenzt.