Büyük bir klasörü sıkıştırmadan tek bir dosyada saklama


11

Bir arşivde sıkıştırıyormuşçasına 78GB'lık bir klasör alıp tek bir dosyada saklamak istiyorum (bir bulut hizmetine yüklemek için), ancak herhangi bir sıkıştırma istemiyorum (çok fazla CPU'm yok) kullanılabilir zaman). Bunu yapabileceğim bir şey var mı, belki de bilmediğim bir terminal komutu?


1
tarLinux'ta komut var . tar -cf long.file.tar folder
Costas

5
FYI: Bazıları disk yazma hızınızdan daha hızlı, bazıları da ağınızdan daha hızlı olacak hızlı sıkıştırma programları vardır. Verilerden hiç biri sıkıştırılabilir durumdaysa, bunlardan birini kullanmak işleri hızlandırır. Örneğin, lzophız için tasarlanmıştır.
derobert

Yanıtlar:


20

Kullanım tar: tar -cf my_big_folder.tar /my/big/folder

İle arşivi geri yükle tar -xf my_big_folder.tar -C /

-C , yukarıda oluşturulan arşiv mutlak yollar içerdiğinden arşivinizi geri yüklemek için kök dizine değişecektir.

DÜZENLEME : Arşivin nispeten büyük boyutundan dolayı, SSH'yi veya bulut kaynağının / klasörün bir bağlama noktasını kullanarak [doğrudan] nihai konumuna göndermek en iyisidir. Örneğin, Cole Johnson'ın önerdiği gibi :

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

veya

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

DÜZENLEME : Blacklight Shining'in de belirttiği gibi , Mutlak yollardan kaçınmak istiyorsanız, büyük klasörün üst öğesine ve taroradan değiştirebilirsiniz:

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

veya

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

Kişisel refleksler

Göreceli veya mutlak yolları dahil etmek kişisel tercih meselesidir.

Mutlak yolların belirgin olduğu durumlar vardır, örneğin bir olağanüstü durum kurtarma durumunda geri yükleme için. Yerel projeler veya koleksiyonlar için, arşivin yanlışlıkla yerinde açılması durumunda, geçerli dizinin karışıklığını önlemek için bir dizin ağacını istenen klasörün üst öğesinden arşivlemek yaygındır. Eğer big_folder yalan yere derin bir içinde standart * NIX hiyerarşisi , ilk standart dışı klasörü arşivlemeye başlamak için bazı mantıklı olabilir nerede big_folder sapması bu oradan da dizin ağacı.

Son olarak - burada bilgiçlikle gitmek - tararşiv üyeleri her zaman görecelidir çünkü a) herhangi bir dizine geri yüklenebilir ve b) bir arşiv oluştururken taröncüyü kaldırır /. Şahsen bir arşivi açarken daima -C kullanma eğilimindeyim .


Düzenlemeyi açıklığa kavuşturmak için: tar -cf /network/mount/point/folder.tar /folderyerel bilgisayara tarring yapmak ve sonra yükleyebilmek yerine bunu yapın
Cole Johnson

Kesin. Düzenlememi ne kadar çok okursam, o kadar karışık görünüyor. Fikriniz için teşekkürler.

1
Bu yol fazlalaştı önlemek mutlak yollarla arşivi yapma: tar -cf $archive.tar -C $source_dir .. Hedef makinenin kaynak dizinle aynı yola sahip bir dizini yoksa, bunu yapmanız gerekir . Sadece emin olun -Csize (ayıklamak zaman yeni bir dizine mkdir $destination_dir && tar -xf $archive.tar -C $destination_dir); aksi takdirde arşiv içeriği içinde bulunduğunuz dizine dökülür.
Blacklight Shining

2

Alternatif: cpio

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

Geçerli dizine paketini açma:

cpio -id < myfolder.cpio

Uyarılar:

  • Kullanmak find /my/big/folderyerine cd, arşiv tam yollar içerecek ve çıkartma bunları izlemeye çalışacaktır;
  • Büyük dosyalar (> 2GB) sorun olabilir;

Cpio, 512 varsayılan blok boyutu ile kullanılırsa katrandan çok daha yavaş olma eğilimindedir. ( Fixunix.com/sco/89900-cpio-performance-vs-tar-bit-mystery.html )
PSkocik
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.