Debajo de la carpeta images\
, tengo las siguientes carpetas:
Usa\
Italy\
Japan\
etc.
Quiero un script que crea una .zip
para cada una de estas carpetas, por lo que tengo usa.zip
, italy.zip
, japan.zip
.
¿Cómo puedo hacer eso?
Debajo de la carpeta images\
, tengo las siguientes carpetas:
Usa\
Italy\
Japan\
etc.
Quiero un script que crea una .zip
para cada una de estas carpetas, por lo que tengo usa.zip
, italy.zip
, japan.zip
.
¿Cómo puedo hacer eso?
Respuestas:
Supongo que esto es Windows, ya que está utilizando barras invertidas.
Obtenga 7za.exe (la versión de línea de comandos de 7-zip ) y póngalo en su %PATH%
.
Luego ejecute esto dentro de su Images\
directorio:
for /f "tokens=* usebackq" %G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%~G.zip" "%~G"
O en un script por lotes:
for /f "tokens=* usebackq" %%G in (`dir /b /a:d "%cd%"`) do 7za a -r -tzip "%%~G.zip" "%%~G"
Suponiendo que esté en Linux, podría usar un script Bash como este:
#!/bin/bash
IFS=$'\n'
for f in $(find "$1" -mindepth 1 -maxdepth 1 -type d ); do
zip -r "$f" "$f"
done
Este script tomará el primer argumento como carpeta, en este caso imágenes, y repetirá exactamente un nivel de profundidad para obtener todas sus carpetas (Estados Unidos, Italia y Japón) y comprimirlas en el mismo lugar.
No eliminará los archivos zip antiguos ni las carpetas de origen. Zip es lo suficientemente inteligente como para detectar archivos zip existentes y actualizarlos cuando se ejecutan nuevamente. Sin embargo, si elimina un archivo en las carpetas de origen , no se eliminará en los archivos zip. Puede eludir este comportamiento eliminando los archivos existentes de antemano.
Puedes usar Winrar para esto.
Seleccione todas sus carpetas, haga clic derecho y seleccione Add to archive
. Ahora seleccione la opción Put each file to separate archive
debajo de la pestaña Files
:
Haga clic en Aceptar y ya está. Si desea archivos .zip en lugar de .rar, simplemente seleccione ZIP
en la General
pestaña debajo Archive format
.
Esta respuesta por MvG trabajó para mí en Ubuntu:
Puedes usar este bucle en
bash
:for i in */; do zip -r "${i%/}.zip" "$i"; done
i
es el nombre de la variable del bucle.*/
significa cada subdirectorio del directorio actual e incluirá una barra inclinada final en esos nombres. Asegúrese decd
ir al lugar correcto antes de ejecutar esto."$i"
simplemente nombra ese directorio, incluida la barra diagonal final. Las comillas aseguran que los espacios en blanco en el nombre del directorio no causen problemas.${i%/}
es como$i
pero con la barra diagonal eliminada, por lo que puede usar eso para construir el nombre del archivo zip.Si desea ver cómo funciona esto, incluya un
echo
anteszip
y verá los comandos impresos en lugar de ejecutados.