¿Cómo puedo crear un archivo .zip para cada carpeta dentro de otra carpeta?

¿Cómo puedo crear un archivo .zip para cada carpeta dentro de otra carpeta?

Debajo de la carpeta images\, tengo las siguientes carpetas:

  • Usa\
  • Italy\
  • Japan\

etc..

Quiero un script que cree un archivo .zippara cada una de estas carpetas, así que tengo usa.zip, italy.zip, japan.zip.

¿Cómo puedo hacer eso?

Respuesta1

Puedes usarwinrarpara 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:

ingrese la descripción de la imagen aquí

Haga clic en Aceptar y listo. Si desea archivos .zip en lugar de .rar, simplemente seleccione ZIPen la Generalpestaña debajo de Archive format.

Respuesta2

Supongo que esto es Windows, ya que estás usando barras invertidas.

Conseguir7za.exe(la versión de línea de comandos de7 cremalleras) y colóquelo 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"

Respuesta3

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á archivos zip antiguos ni las carpetas de origen. Zip es lo suficientemente inteligente como para detectar archivos zip existentes y actualizarlos cuando se vuelva a ejecutar. Sin embargo, si elimina un archivo en las carpetas de origenno lo haráeliminarse en los archivos zip. Puede evitar este comportamiento eliminando los archivos existentes de antemano.

Respuesta4

EsterespuestaporMvGfuncionó 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 diagonal al final de esos nombres. Asegúrate de estar cden el lugar correcto antes de ejecutar esto. "$i"simplemente nombra ese directorio, incluida la barra diagonal final. Las comillas garantizan que los espacios en blanco en el nombre del directorio no causarán problemas. ${i%/}es similar $ipero sin la barra diagonal final, por lo que puede usarla para construir el nombre del archivo zip.

Si desea ver cómo funciona esto, incluya un echoantes de zip y verá los comandos impresos en lugar de ejecutados.

información relacionada