Compactar pasta por pasta

1. Compactar pasta por pasta

Antonio Carlos
cainf

(usa Debian)

Enviado em 13/10/2025 - 10:27h

Amigos tudo na paz
Eu faço um backup de forma que entra na pasta as pastas são compactadas uma a uma ou seja, eu faço um backup separado ao inves da pasta completa, isso é pratico na hora que for precisar restaurar ao inves de descompactar um arquivo gigante eu irei na pasta específica.

O problema aqui é que, nesse comando ele compacta pasta por pasta e só depois move para o local de backup exemplo, um hd externo

Segue o comando eu gostaria de compactar JÁ para o hd externo ao inves de compactar na pasta e depois mover para o hdexterno

find /arquivo/sistema/ -maxdepth 1 -mindepth 1 -type d | while read f; do tar -Pcf "$f.tar" "$f" && mv "$f.tar" /hdexterno/semanal/segunda/sistema/; done




  


2. Re: Compactar pasta por pasta

Alexa Bolada
alexabolada

(usa Debian)

Enviado em 13/10/2025 - 10:27h

Respondendo conforme solicitado. Vou sugerir comandos que criam o arquivo .tar direto no HD externo.
Uso find, tar e basename.
Evito arquivos temporários na pasta de origem.

Exemplo simples (pode ser executado como usuário comum se o HD externo for gravável pelo seu usuário):



$ find /arquivo/sistema/ -maxdepth 1 -mindepth 1 -type d -print0 | while IFS= read -r -d '' f; do base=$(basename "$f"); tar -Pcf - "$f" > "/hdexterno/semanal/segunda/sistema/$base.tar"; done 


Explicação curta.
O tar escreve no stdout com -cf - .
Redirecionamos o stdout direto para o HD externo.
Não há mv nem arquivo temporário na origem.

Se quiser compactar com gzip (arquivos .tar.gz):



$ find /arquivo/sistema/ -maxdepth 1 -mindepth 1 -type d -print0 | while IFS= read -r -d '' f; do base=$(basename "$f"); tar -Pczf - "$f" > "/hdexterno/semanal/segunda/sistema/$base.tar.gz"; done 


Observações importantes.
Se não quer caminhos absolutos no tar, compacte a partir do diretório pai.
Exemplo para evitar o / no início do conteúdo do .tar:



$ cd /arquivo/sistema && find . -maxdepth 1 -mindepth 1 -type d -print0 | while IFS= read -r -d '' f; do base=$(basename "$f"); tar -C /arquivo/sistema -cf - "./$base" > "/hdexterno/semanal/segunda/sistema/$base.tar"; done 


Permissões e montagem.
Se o HD externo estiver montado somente para root, rode o loop como root (substitua o $ por #).
Exemplo se precisar de root:



# find /arquivo/sistema/ -maxdepth 1 -mindepth 1 -type d -print0 | while IFS= read -r -d '' f; do base=$(basename "$f"); tar -Pcf - "$f" > "/hdexterno/semanal/segunda/sistema/$base.tar"; done 


Se quiser, eu ajusto o comando para incluir exclusões, compressão diferente (xz, bzip2) ou paralelizar com pigz.


3. Re: Compactar pasta por pasta

Antonio Carlos
cainf

(usa Debian)

Enviado em 13/10/2025 - 11:59h


Opa meu parceiro era disso mesmo que eu precisava

Valeu mesmo :=)






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts