Jak mogę utworzyć plik .zip dla każdego folderu w innym folderze?


18

W folderze images\mam następujące foldery:

  • Usa\
  • Italy\
  • Japan\

itp..

Chcę skrypt, który tworzy .zipdla każdego z tych folderów, więc mam usa.zip, italy.zip, japan.zip.

Jak mogę to zrobić?

Odpowiedzi:


10

Zakładam, że jest to Windows, ponieważ używasz odwrotnych ukośników.

Pobierz 7za.exe (wersja 7-zip z linii poleceń ) i umieść go w swoim %PATH%.

Następnie uruchom to w swoim Images\katalogu:

for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"

Lub w skrypcie wsadowym:

for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"

To nie działa, jeśli foldery mają spacje w nazwie.
jiggunjer

@jiggunjer Tak, masz rację. Naprawiłem go do pracy ze spacjami w nazwach folderów.
paradroid

1
Działa to nawet z normalnym plikiem wykonywalnym 7zip. Zaktualizowałem 7za do „C: \ Program Files \ 7-Zip \ 7z.exe” i działało bez problemu.
user1324161 17.07.19

8

Zakładając, że jesteś w systemie Linux, możesz użyć skryptu Bash w następujący sposób:

  #!/bin/bash

  IFS=$'\n'

  for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
    zip -r "$f" "$f"
  done

Ten skrypt pobierze pierwszy argument jako folder, w tym przypadku obrazy, i przejdzie dokładnie jeden poziom w głąb, aby uzyskać wszystkie foldery (Usa, Włochy i Japonia) i spakować je w tym samym miejscu.

Nie usunie starych plików zip ani folderów źródłowych. Zip jest wystarczająco inteligentny, aby wykryć istniejące pliki zip i zaktualizować je po ponownym uruchomieniu. Jeśli jednak usuniesz plik z folderów źródłowych, nie zostanie on usunięty z plików zip. Możesz obejść to zachowanie, usuwając wcześniej istniejące pliki.


Użyłem skryptu Linux opublikowanego przez sponiro i na początku dodałem wiersz, aby usunąć foldery: znajdź typ $ 1 d | xargs rm -rf
genevish 15.04.15

7

Możesz do tego użyć Winrar .

Wybierz wszystkie foldery, kliknij prawym przyciskiem myszy i wybierz Add to archive. Teraz wybierz opcję Put each file to separate archivepod zakładką Files:

wprowadź opis zdjęcia tutaj

Kliknij OK i gotowe. Jeśli chcesz pliki .zip zamiast .rar, po prostu wybierz ZIPna Generalkarcie poniżej Archive format.


0

Ta odpowiedź przez mvg pracował dla mnie na Ubuntu:

Możesz użyć tej pętli w bash:

for i in */; do zip -r "${i%/}.zip" "$i"; done

ijest nazwą zmiennej pętli. */oznacza każdy podkatalog bieżącego katalogu i będzie zawierać końcowe ukośniki w tych nazwach. Upewnij się, że jesteś cdwe właściwym miejscu przed wykonaniem tego. "$i"po prostu nazwij ten katalog, w tym ukośnik końcowy. Znaki cudzysłowu zapewniają, że białe spacje w nazwie katalogu nie spowodują problemów. ${i%/}jest jak, $iale z usuniętym końcowym ukośnikiem, więc możesz użyć tego do skonstruowania nazwy pliku zip.

Jeśli chcesz zobaczyć, jak to działa, dołącz echoprzed zip i, a zobaczysz polecenia wydrukowane zamiast wykonanych.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.