Como armazenar uma pasta grande em um único arquivo sem compactação

11

Quero pegar uma pasta de 78 GB e armazená-la em um único arquivo (para fazer o upload em um serviço em nuvem), como se estivesse compactando em um arquivo, mas não quero nenhuma compactação (não tenho tanta CPU tempo disponível). Existe alguma maneira de conseguir isso, talvez um comando terminal que eu não conheça?

cjmaria
fonte
1
existe tarcomando no linux. tar -cf long.file.tar folder
Costas
5
FYI: Existem programas de compactação rápidos, alguns que serão mais rápidos que a velocidade de gravação do disco e muitos que serão mais rápidos que a sua rede. O uso de um deles realmente acelerará as coisas, se os dados forem compactáveis. Por exemplo, lzopé projetado para velocidade.
Derbert

Respostas:

20

Use tar: tar -cf my_big_folder.tar /my/big/folder

Restaure o arquivo morto com tar -xf my_big_folder.tar -C /

-C mudará para o diretório raiz para restaurar seu arquivo, pois o arquivo criado acima contém caminhos absolutos.

EDIT : Devido ao tamanho relativamente grande do arquivo, é melhor enviá-lo [diretamente] para seu local final, usando SSH ou um ponto de montagem do recurso / pasta da nuvem. Por exemplo, como Cole Johnson sugere :

tar -cf /network/mount/point/my_big_folder.tar /my/big/folder

ou

tar -c /my/big/folder | ssh example.com "cat > my_big_folder.tar"

EDIT : Como o Blacklight Shining também sugere , se você deseja evitar caminhos absolutos, pode mudar para o pai da grande pasta e a tarpartir daí:

tar -cf /network/mount/point/my_big_folder.tar \
    -C /my/big/folder/location the_big_folder

ou

tar -cC /my/big/folder/location the_big_folder | \
ssh example.com "cat > my_big_folder.tar"

Reflexões pessoais

A inclusão de caminhos relativos ou absolutos é uma questão de preferência pessoal.

Há casos em que caminhos absolutos são óbvios, por exemplo, para uma restauração em uma situação de recuperação de desastre. Para projetos ou coleções locais, é comum arquivar uma árvore de diretórios a partir do pai da pasta desejada, para evitar sobrecarregar o diretório atual, caso o arquivo seja acidentalmente descompactado no local. Se o big_folder estiver em algum lugar profundo de uma hierarquia * NIX padrão , pode fazer algum sentido começar a arquivar a primeira pasta não padrão na qual o big_folder se desvia e sua árvore de diretórios a partir daí.

Finalmente - os pedantes aqui - os tarmembros do arquivo são sempre relativos, pois a) eles podem ser restaurados em qualquer diretório eb) tar remove a liderança /ao criar um arquivo. Pessoalmente, costumo sempre usar -C ao descompactar um arquivo.

Comunidade
fonte
Para esclarecer o edit: fazer tar -cf /network/mount/point/folder.tar /folder, em vez de asfaltamento para o computador local e, em seguida, upload, se puder
Cole Johnson
Exato. Quanto mais leio minha edição, mais acho que ela parece confusa. Obrigado pela sua compreensão.
1
É importante notar o caminho para evitar fazer o arquivo com caminhos absolutos: tar -cf $archive.tar -C $source_dir .. Se a máquina de destino não tiver um diretório com o mesmo caminho que o diretório de origem, você precisará fazer isso. Apenas certifique-se de -Centrar em um novo diretório ao extrair ( mkdir $destination_dir && tar -xf $archive.tar -C $destination_dir); outra coisa o conteúdo do arquivo vai ser despejado em qualquer diretório acontecer de você estar em.
Blacklight Brilhante
2

Alternativa: cpio

(cd /my/big/folder && find . -depth -print0 | cpio -0o > myfolder.cpio)

Descompactando no diretório atual:

cpio -id < myfolder.cpio

Ressalvas:

  • Se usado em find /my/big/foldervez de cd, o arquivo conterá caminhos completos e a extração tentará segui-los;
  • Arquivos grandes (> 2 GB) podem ser um problema;
Vi.
fonte
O Cpio tende a ser muito mais lento que o tar, se usado com o tamanho de bloco padrão de 512. ( fixunix.com/sco/89900-cpio-performance-vs-tar-bit-mystery.html )
PSkocik