Come posso creare un file .zip per ogni cartella all'interno di un'altra cartella?


18

Sotto la cartella images\, ho le seguenti cartelle:

  • Usa\
  • Italy\
  • Japan\

eccetera..

Voglio uno script che crea una .zipper ciascuna di queste cartelle, quindi non ho usa.zip, italy.zip, japan.zip.

Come posso fare ciò?

Risposte:


10

Presumo che questo sia Windows, poiché stai usando le barre rovesciate.

Ottieni 7za.exe (la versione da 7-zip della riga di comando ) e inseriscilo nel tuo %PATH%.

Quindi eseguilo nella tua Images\directory:

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

O in uno script batch:

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

Questo non funziona se le cartelle hanno spazi nel loro nome.
jiggunjer,

@jiggunjer Sì, hai ragione. Ho risolto il problema con gli spazi nei nomi delle cartelle.
paradroid,

1
Funziona anche con un normale eseguibile 7zip. Ho aggiornato 7za a "C: \ Programmi \ 7-Zip \ 7z.exe" e ha funzionato senza problemi.
user1324161

8

Supponendo che tu sia su Linux potresti usare uno script Bash come questo:

  #!/bin/bash

  IFS=$'\n'

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

Questo script prenderà il primo argomento come cartella, in questo caso immagini, e reciderà esattamente a un livello profondo per ottenere tutte le cartelle (Stati Uniti, Italia e Giappone) e comprimerle nello stesso posto.

Non eliminerà i vecchi file zip o le cartelle di origine. Zip è abbastanza intelligente da rilevare i file zip esistenti e aggiornarli quando si esegue di nuovo. Tuttavia, se si elimina un file nelle cartelle di origine, questo non verrà eliminato nei file zip. È possibile aggirare questo comportamento eliminando in anticipo i file esistenti.


Ho usato lo script Linux pubblicato da Sponiro e ho aggiunto una riga all'inizio per eliminare le cartelle: trova $ 1 -tipo d | xargs rm -rf
genevish

7

Puoi usare Winrar per questo.

Seleziona tutte le cartelle, fai clic con il tasto destro e seleziona Add to archive. Ora seleziona l'opzione Put each file to separate archivesotto la scheda Files:

inserisci qui la descrizione dell'immagine

Fai clic su OK e il gioco è fatto. Se vuoi file .zip invece di .rar, seleziona ZIPnella Generalscheda sotto Archive format.


0

Questa risposta di MvG ha funzionato per me su Ubuntu:

Puoi usare questo loop in bash:

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

iè il nome della variabile loop. */indica ogni sottodirectory della directory corrente e includerà una barra finale in quei nomi. Assicurati di cdessere nel posto giusto prima di eseguire questo. "$i"nomina semplicemente quella directory, inclusa la barra finale. Le virgolette assicurano che gli spazi bianchi nel nome della directory non causino problemi. ${i%/}è come $ima con la barra finale rimossa, quindi puoi usarla per costruire il nome del file zip.

Se vuoi vedere come funziona, includi echoprima di zip e vedrai i comandi stampati anziché eseguiti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.