Unter dem Ordner habe images\
ich folgende Ordner:
Usa\
Italy\
Japan\
etc..
Ich möchte ein Skript , das ein erstellt .zip
für jeden dieser Ordner, so habe ich usa.zip
, italy.zip
, japan.zip
.
Wie kann ich das machen?
Unter dem Ordner habe images\
ich folgende Ordner:
Usa\
Italy\
Japan\
etc..
Ich möchte ein Skript , das ein erstellt .zip
für jeden dieser Ordner, so habe ich usa.zip
, italy.zip
, japan.zip
.
Wie kann ich das machen?
Antworten:
Ich gehe davon aus, dass dies Windows ist, da Sie Backslashes verwenden.
Holen Sie sich 7za.exe (die Befehlszeilenversion von 7-zip ) und fügen Sie sie in Ihre %PATH%
.
Dann führen Sie dies in Ihrem Images\
Verzeichnis aus:
for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"
Oder in einem Batch-Skript:
for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"
Sie können Winrar dafür verwenden.
Wählen Sie alle Ihre Ordner aus, klicken Sie mit der rechten Maustaste und wählen Sie Add to archive
. Wählen Sie nun die Option Put each file to separate archive
unter der Registerkarte Files
:
Klicken Sie auf OK und Sie sind fertig. Wenn Sie .zip-Dateien anstelle von .rar möchten, wählen Sie einfach ZIP
in der General
Registerkarte unter Archive format
.
Angenommen, Sie arbeiten unter Linux, könnten Sie ein Bash-Skript wie das folgende verwenden:
#!/bin/bash
IFS=$'\n'
for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
zip -r "$f" "$f"
done
Dieses Skript nimmt das erste Argument als Ordner, in diesem Fall Bilder, und verwendet genau eine Ebene, um alle Ordner (USA, Italien und Japan) zu erhalten und an derselben Stelle zu komprimieren.
Es werden keine alten ZIP-Dateien oder Quellordner gelöscht. Zip ist intelligent genug, um vorhandene ZIP-Dateien zu erkennen und zu aktualisieren, wenn sie erneut ausgeführt werden. Wenn Sie jedoch eine Datei in den Quellordnern löschen , wird diese nicht in den ZIP-Dateien gelöscht. Sie können dieses Verhalten möglicherweise umgehen, indem Sie zuvor vorhandene Dateien löschen.
Diese Antwort von MvG funktionierte für mich unter Ubuntu:
Sie können diese Schleife verwenden in
bash
:for i in */; do zip -r "${i%/}.zip" "$i"; done
i
ist der Name der Schleifenvariablen.*/
bedeutet jedes Unterverzeichnis des aktuellen Verzeichnisses und enthält einen abschließenden Schrägstrich in diesen Namen. Stellen Sie sicher, dass Siecd
an der richtigen Stelle sind, bevor Sie dies ausführen."$i"
benennt einfach dieses Verzeichnis, einschließlich abschließender Schrägstriche. Die Anführungszeichen stellen sicher, dass Leerzeichen im Verzeichnisnamen keine Probleme verursachen.${i%/}
ist wie$i
aber mit dem abschließenden Schrägstrich entfernt, so dass Sie das verwenden können, um den Namen der zip-Datei zu konstruieren.Wenn Sie sehen möchten, wie dies funktioniert, schließen Sie ein
echo
vor dem ein,zip
und Sie werden die Befehle gedruckt anstatt ausgeführt sehen.