Comprimir uma pasta com alcatrão?

Estou tentando compactar uma pasta (/var/www/) para ~/www_backups/$time.tar onde $time é a data atual.

Isso é o que eu tenho:

cd /var/www && sudo tar -czf ~/www_backups $time" 

Estou completamente perdido e estou nisso há horas. Não tenho certeza se -czf está correto. Eu simplesmente quero copiar todo o conteúdo em /var/www em um arquivo $time.tar e quero manter as permissões de arquivo para todos os arquivos. Alguém pode me ajudar?

Comentários

  • você precisa de um " do outro lado de $time também.

Resposta

Para tar e gzip uma pasta, a sintaxe é:

tar czf name_of_archive_file.tar.gz name_of_directory_to_tar 

O - com czf é opcional.

Se você deseja tar o diretório atual, use . para designá-lo.

Para construir nomes de arquivos dinamicamente, use o utilitário date (consulte sua página de manual para as opções de formato disponíveis). Por exemplo:

cd /var/www && tar czf ~/www_backups/$(date +%Y%m%d-%H%M%S).tar.gz . 

Isso criará um arquivo chamado algo como 20120902-185558.tar.gz.

No Linux, é provável que tar também suporte compactação BZip2 com j em vez de z opção. E possivelmente outros. Verifique a página do manual em seu sistema local.

Comentários

  • Isso é perfeito, obrigado. Porém, tenho um pequeno problema. Depois de criar um arquivo tar de / var / www, ele é colocado nos diretórios / var / www no arquivo tar. Aqui ' é o código i ' m usando agora sudo tar -czf ~/www_backups/$time.tar /var/www/" Imagine que tenho um arquivo chamado test.txt dentro de / var / www. Depois de fazer uma cópia tar do arquivo, quando eu extraí-lo, ele será colocado dentro dos diretórios / var / www. Isso faz sentido? Espero que sim, é meio difícil de explicar. Vou verificar se há suporte para BZip2, obrigado pela sugestão!
  • Isso ' é por que você primeiro cd para o diretório que você deseja empacotar, então tar cf file.tar . – aquele último . em vez de especificar o caminho completo fará com que os caminhos dentro do arquivo sejam relativos ao diretório atual. Você também pode usar a opção -C para tar (veja a página de manual).
  • Sim, funcionou muito melhor. Muito obrigado, agradeço!
  • @Qwertylicious -f (da página de manual) Read the archive from or write the archive to the specified file.The filename can be - for standard input or standard output.
  • Com versões recentes de tar, as J maiúsculas (em vez de z) usarão xz Compressão LZMA2.

Resposta

Exemplos de algoritmos de compressão mais comuns

O título da pergunta para isso é simplesmente " Compactar um pasta com tar? " Como este título é muito geral, mas a pergunta e a resposta são muito mais específicas, e devido ao grande número de visualizações que esta pergunta atraiu, eu percebi seria benéfico adicionar uma lista atualizada de exemplos de arquivamento / compactação e extração / descompactação, com vários algoritmos de compactação comumente usados.

Eles foram testados com o Ubuntu 18.04.4. Eles são muito simples para uso geral, mas poderiam ser facilmente integrados ao conteúdo das perguntas mais específicas do OP usando as técnicas na resposta aceita e nos comentários úteis acima.

Uma coisa a ser observada para os mais gerais público é que tar não adicionará as extensões necessárias (como .tar.gz) automaticamente – o usuário deve adicioná-las explicitamente, conforme visto no comandos abaixo:

# 1: tar (create uncompressed archive) all files and directories in the current working directory recursively into an uncompressed tarball tar cvf filename.tar * # 2: Untar (extract uncompressed archive) all files and directories in an uncompressed tarball recursively into the current working directory tar xvf filename.tar # 3: tar (create gzipped archive) all files and directories in the current working directory recursively into a tarball compressed with gzip tar cvzf filename.tar.gz * # 4: Untar (extract gzipped archive) all files and directories in a tarball compressed with gzip recursively into the current working directory tar xvf filename.tar.gz # Note: same options as 2 above # 5: tar (create bzip2"ed archive) all files and directories in the current working directory recursively into a tarball compressed with bzip2 tar cvjf filename.tar.bz2 * # Note: little "j" in options # 6: Untar (extract bzip2"ed archive) all files and directories in an tarball compressed with bzip2 recursively into the current working directory tar xvf filename.tar.bz2 # Note: same options as 2 and 4 above # 7: tar (create xz"ed archive) all files and directories in the current working directory recursively into a tarball compressed with xz tar cvJf filename.tar.xz * # Note: capital "J" in options # 8: Untar (extract xz"ed archive) all files and directories in an tarball compressed with xz recursively into the current working directory tar xvf filename.tar.xz # Note: same options as 2, 4, and 6 above 

Veja a página do manual tar (melhor usar man tar em sua máquina específica) para obter mais detalhes. Abaixo, resumo as opções usadas acima diretamente da página de manual:

-c, –create
cria um novo arquivo

-x, –extract, –get
extrai os arquivos de um arquivo

-v, –verbose
listar detalhadamente os arquivos processados

-z, –gzip
filtrar o arquivo através do gzip

-j, –bzip2
filtrar o arquivo através do bzip2

-J, –xz
filtrar o arquivo através de xz

-f, –file = ARQUIVO
usar arquivo ou dispositivo ARQUIVO

Não há necessidade de adicionar o - na frente das opções combinadas ou o sinal = entre a opção f e o nome do arquivo.

Peguei tudo isso em meu artigo recente, que será expandido em um artigo muito mais abrangente, pois tenho tempo para trabalhar isso.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *