Como posso criar um arquivo .zip para cada pasta dentro de outra pasta?

Como posso criar um arquivo .zip para cada pasta dentro de outra pasta?

Na pasta images\, tenho as seguintes pastas:

  • Usa\
  • Italy\
  • Japan\

etc..

Quero um script que crie um .zippara cada uma dessas pastas, então tenho usa.zip, italy.zip, japan.zip.

Como eu posso fazer isso?

Responder1

Você pode usarWinrarpor esta.

Selecione todas as suas pastas, clique com o botão direito e selecione Add to archive. Agora selecione a opção Put each file to separate archivena guia Files:

insira a descrição da imagem aqui

Clique em OK e pronto. Se você quiser arquivos .zip em vez de .rar, basta selecionar ZIPna Generalaba abaixo de Archive format.

Responder2

Presumo que seja o Windows, pois você está usando barras invertidas.

Pegar7za.exe(a versão da linha de comando do7-zip) e coloque-o no seu arquivo %PATH%.

Em seguida, execute isso dentro do seu Images\diretório:

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

Ou em um script em lote:

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

Responder3

Supondo que você esteja no Linux, você poderia usar um 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 pegará o primeiro argumento como pasta, neste caso imagens, e recorrerá exatamente a um nível de profundidade para obter todas as suas pastas (EUA, Itália e Japão) e compactá-las no mesmo lugar.

Isso não excluirá arquivos zip antigos ou pastas de origem. Zip é inteligente o suficiente para detectar arquivos zip existentes e atualizá-los quando executado novamente. No entanto, se você excluir um arquivo nas pastas de origemnão vaiser excluído nos arquivos zip. Você pode contornar esse comportamento excluindo previamente os arquivos existentes.

Responder4

EsseresponderporMvGfuncionou para mim no Ubuntu:

Você pode usar esse loop em bash:

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

ié o nome da variável do loop. */significa todos os subdiretórios do diretório atual e incluirá uma barra final nesses nomes. Certifique-se cdde estar no lugar certo antes de executar isso. "$i"simplesmente nomeia esse diretório, incluindo a barra final. As aspas garantem que os espaços em branco no nome do diretório não causarão problemas. ${i%/}é como, $imas com a barra final removida, então você pode usá-la para construir o nome do arquivo zip.

Se você quiser ver como isso funciona, inclua um echoantes de zip e você verá os comandos impressos em vez de executados.

informação relacionada