Debajo de la carpeta images\, tengo las siguientes carpetas:
Usa\Italy\Japan\
etc.
Quiero un script que crea una .zippara 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 .zippara 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 archivedebajo de la pestaña Files:

Haga clic en Aceptar y ya está. Si desea archivos .zip en lugar de .rar, simplemente seleccione ZIPen la Generalpestañ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
ies el nombre de la variable del bucle.*/significa cada subdirectorio del directorio actual e incluirá una barra inclinada final en esos nombres. Asegúrese decdir 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$ipero 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
echoanteszipy verá los comandos impresos en lugar de ejecutados.