Cara menyimpan folder besar dalam satu file tanpa kompresi

11

Saya ingin mengambil folder 78GB dan menyimpannya dalam satu file (untuk diunggah ke layanan cloud), seolah-olah saya mengompresnya dalam arsip, tetapi saya tidak ingin kompresi apa pun (saya tidak memiliki banyak CPU waktu tersedia). Apakah ada yang bisa saya lakukan ini, mungkin perintah terminal yang saya tidak tahu?

cjmaria
sumber
1
ada tarperintah di linux. tar -cf long.file.tar folder
Costas
5
FYI: Ada program kompresi cepat, beberapa di antaranya akan lebih cepat daripada kecepatan tulis disk Anda, dan banyak yang akan lebih cepat dari jaringan Anda. Menggunakan salah satu dari mereka benar-benar akan mempercepat, jika data kompresibel sama sekali. Misalnya, lzopdirancang untuk kecepatan.
derobert

Jawaban:

20

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

Pulihkan arsip dengan tar -xf my_big_folder.tar -C /

-C akan berubah ke direktori root untuk mengembalikan arsip Anda karena arsip yang dibuat di atas mengandung path absolut.

EDIT : Karena ukuran arsip yang relatif besar, yang terbaik adalah mengirimkannya [langsung] ke lokasi terakhirnya, menggunakan SSH atau titik pemasangan sumber daya / folder cloud. Misalnya, seperti yang disarankan Cole Johnson :

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

atau

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

EDIT : Seperti yang disarankan Blacklight Shining , Jika Anda ingin menghindari jalur absolut, Anda dapat mengubah ke induk folder besar dan tardari sana:

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

atau

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

Refleksi pribadi

Apakah akan menyertakan jalur relatif atau absolut adalah masalah preferensi pribadi.

Ada kasus jalur absolut jelas, misalnya untuk pemulihan dalam situasi pemulihan bencana. Untuk proyek atau koleksi lokal, biasanya mengarsipkan pohon direktori dari induk folder yang dikehendaki untuk menghindari kekacauan direktori saat ini, seandainya arsip secara tidak sengaja dibongkar di tempat. Jika big_folder terletak di suatu tempat jauh di dalam hierarki standar * NIX , mungkin masuk akal untuk mulai mengarsipkan folder non-standar pertama tempat big_folder menyimpang dari dan susunan direktori dari sana.

Akhirnya - menjadi rumit di sini - taranggota arsip selalu relatif karena a) mereka dapat dipulihkan dalam direktori apa pun dan b) tar menghapus yang terdepan /saat membuat arsip. Saya pribadi cenderung selalu menggunakan -C saat membongkar arsip.

Komunitas
sumber
Untuk mengklarifikasi hasil edit: lakukan tar -cf /network/mount/point/folder.tar /folderalih - alih tarring ke komputer lokal dan kemudian unggah jika Anda bisa
Cole Johnson
Tepat. Semakin banyak saya membaca hasil edit saya, semakin saya pikir itu terlihat membingungkan. Terima kasih atas wawasan Anda.
1
Ini perlu dicatat cara untuk menghindari membuat arsip dengan path absolut: tar -cf $archive.tar -C $source_dir .. Jika mesin tujuan tidak memiliki direktori dengan jalur yang sama dengan direktori sumber, Anda harus melakukannya. Pastikan untuk -Cmasuk ke direktori baru ketika Anda mengekstrak ( mkdir $destination_dir && tar -xf $archive.tar -C $destination_dir); jika tidak, konten arsip akan dibuang ke direktori apa pun yang Anda tuju.
Blacklight Shining
2

Alternatif: cpio

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

Buka kemasan ke direktori saat ini:

cpio -id < myfolder.cpio

Peringatan:

  • Jika digunakan find /my/big/foldersebagai ganti cd, arsip akan berisi jalur lengkap dan ekstraksi akan mencoba mengikuti mereka;
  • File besar (> 2GB) mungkin menjadi masalah;
Vi.
sumber
Cpio cenderung jauh lebih lambat daripada tar, jika digunakan dengan ukuran default 512. ( fixunix.com/sco/89900-cpio-performance-vs-tar-bit-mystery.html )
PSkocik