Wie kann ich eine ZIP-Datei für jeden Ordner in einem anderen Ordner erstellen?

16

Unter dem Ordner habe images\ich folgende Ordner:

  • Usa\
  • Italy\
  • Japan\

etc..

Ich möchte ein Skript , das ein erstellt .zipfür jeden dieser Ordner, so habe ich usa.zip, italy.zip, japan.zip.

Wie kann ich das machen?

Juan Claude
quelle

Antworten:

9

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"
paradroid
quelle
Dies funktioniert nicht, wenn die Ordner Leerzeichen enthalten.
Jiggunjer
@jiggunjer Ja, du hast recht. Ich habe es behoben, um mit Leerzeichen in Ordnernamen zu arbeiten.
Paradroid
1
Dies funktioniert auch mit normalen 7zip-Programmen. Ich habe 7za auf "C: \ Programme \ 7-Zip \ 7z.exe" aktualisiert und es hat ohne Probleme funktioniert.
user1324161
7

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 archiveunter der Registerkarte Files:

Bildbeschreibung hier eingeben

Klicken Sie auf OK und Sie sind fertig. Wenn Sie .zip-Dateien anstelle von .rar möchten, wählen Sie einfach ZIPin der GeneralRegisterkarte unter Archive format.

nmat
quelle
7

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.

Robert Kühne
quelle
Ich habe das von sponiro gepostete Linux-Skript verwendet und am Anfang eine Zeile hinzugefügt, um Ordner zu löschen: find $ 1 -type d | xargs rm -rf
genevish
0

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

iist 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 Sie cdan 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 $iaber 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 echovor dem ein, zip und Sie werden die Befehle gedruckt anstatt ausgeführt sehen.

Franck Dernoncourt
quelle