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

16

Sob a pasta images\, tenho as seguintes pastas:

  • Usa\
  • Italy\
  • Japan\

etc ..

Eu quero um script que cria um .zippara cada uma dessas pastas, então eu tenho usa.zip, italy.zip, japan.zip.

Como eu posso fazer isso?

Juan Claude
fonte

Respostas:

9

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

Obtenha o 7za.exe (a versão da linha de comando do 7-zip ) e coloque-o no seu %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"
paradroid
fonte
Isso não funciona se as pastas tiverem espaços em seus nomes.
Jggunjer # 19/17
@jiggunjer Sim, você está certo. Eu o corrigi para trabalhar com espaços nos nomes de pastas.
Paradroid 19/09
1
Isso funciona mesmo com o executável 7zip normal. Atualizei o 7za para "C: \ Arquivos de Programas \ 7-Zip \ 7z.exe" e funcionou sem problemas.
user1324161
7

Você pode usar o Winrar para isso.

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ê deseja arquivos .zip em vez de .rar, basta selecionar ZIPna Generalguia em Archive format.

nmat
fonte
7

Supondo que você esteja no Linux, você pode 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

Esse script pegará o primeiro argumento como pasta, neste caso imagens, e recuará exatamente um nível para obter todas as suas pastas (EUA, Itália e Japão) e compactá-las no mesmo local.

Não excluirá arquivos zip antigos ou as pastas de origem. O Zip é inteligente o suficiente para detectar arquivos zip existentes e atualizá-los quando executados novamente. No entanto, se você excluir um arquivo nas pastas de origem, ele não será excluído nos arquivos zip. Você pode contornar esse comportamento excluindo os arquivos existentes com antecedência.

Robert Kühne
fonte
Eu usei o script Linux que o sponiro postou e adicionei uma linha no início para excluir pastas: find $ 1-type d | xargs rm -rf
genevish
0

Esta resposta do MvG funcionou para mim no Ubuntu:

Você pode usar este loop em bash:

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

ié o nome da variável de loop. */significa todos os subdiretórios do diretório atual e incluirá uma barra final nesses nomes. Certifique-se de cdestar 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 causem problemas. ${i%/}é semelhante, $imas com a barra final removida, para que você possa usá-lo para construir o nome do arquivo zip.

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

Franck Dernoncourt
fonte