Sotto la cartella images\
, ho le seguenti cartelle:
Usa\
Italy\
Japan\
eccetera..
Voglio uno script che crea una .zip
per ciascuna di queste cartelle, quindi non ho usa.zip
, italy.zip
, japan.zip
.
Come posso fare ciò?
Sotto la cartella images\
, ho le seguenti cartelle:
Usa\
Italy\
Japan\
eccetera..
Voglio uno script che crea una .zip
per ciascuna di queste cartelle, quindi non ho usa.zip
, italy.zip
, japan.zip
.
Come posso fare ciò?
Risposte:
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"
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.
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 archive
sotto la scheda Files
:
Fai clic su OK e il gioco è fatto. Se vuoi file .zip invece di .rar, seleziona ZIP
nella General
scheda sotto Archive format
.
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 dicd
essere 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$i
ma con la barra finale rimossa, quindi puoi usarla per costruire il nome del file zip.Se vuoi vedere come funziona, includi
echo
prima dizip
e vedrai i comandi stampati anziché eseguiti.