![Como posso criar um arquivo .zip para cada pasta dentro de outra pasta?](https://rvso.com/image/1284792/Como%20posso%20criar%20um%20arquivo%20.zip%20para%20cada%20pasta%20dentro%20de%20outra%20pasta%3F.png)
Na pasta images\
, tenho as seguintes pastas:
Usa\
Italy\
Japan\
etc..
Quero um script que crie um .zip
para 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 archive
na guia Files
:
Clique em OK e pronto. Se você quiser arquivos .zip em vez de .rar, basta selecionar ZIP
na General
aba 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-secd
de 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,$i
mas 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
echo
antes dezip
e você verá os comandos impressos em vez de executados.