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?
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?
Respostas:
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"
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:

Clique em OK e pronto. Se você deseja arquivos .zip em vez de .rar, basta selecionar ZIPna Generalguia em Archive format.
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.
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 decdestar 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
echoantes dezipe você verá os comandos impressos em vez de executados.