Bagaimana cara mem-gunzip direktori?

6

Saya memiliki direktori gzip yang disebut "baru" yang berisi direktori dan file lain, yang saya kompres dengan cara berikut

gzip -cvr --no-name /path-to-directory/new > new.gz

Saya telah menyalin ini & gt; 700MB ke lokasi lain (di server yang berbeda) dan sekarang ingin membongkar itu. Jadi, pada server baru saya pergi ke direktori memiliki "baru" di dalamnya dan saya gunakan

gzip new

Hasilnya adalah file 880MB tunggal - tanpa direktori atau file yang lebih kecil.

Apa yang saya lakukan salah dan bagaimana saya bisa memperbaikinya?

Terima kasih.

chaimp
sumber

Jawaban:

15

Gzip memampatkan file, bukan direktori. Jika Anda ingin gzip direktori, Anda harus terlebih dahulu membuat tarball. Anda dapat membuat tarball dan mengompresnya dalam satu langkah.

tar cvzf tarball.tar.gz directory/

(buat, verbose, gZip, ke file ini)

untuk membalikkan proses

tar xvzf tarball.tar.gz

(ekstrak)

Quentin
sumber
Lalu apa gunanya gzip -r?
chaimp
@ jeffp: gzip -r akan turun ke direktori dan gzip semua file di dalamnya. itu tidak akan membuat file gzip tunggal yang mengandung isi dari direktori tersebut. misalnya, jika Anda memiliki "dir1" yang berisi "foo" dan "bar", dan "dir2" yang mengandung "baz", gzip -r dir1 dir2, Anda akan berakhir dengan: "dir1 / foo.gz" "dir1 / bar.gz" "dir2 / baz.gz"
quack quixote
@ jeffp: perhatikan hasil dari perintah Anda pada contoh saya: gzip -cvr --no-names dir* > new.gz ... sekarang "new.gz" berisi hal yang sama itu cat dir1/foo.gz dir1/bar.gz dir2/baz.gz > new.gz. hanya saja 3 file data terkompresi terkumpul bersama. tidak ada yang memberitahu decompressor tentang file individual. gunakan tar .
quack quixote
2
tar cf - directory | gzip -9c > foo.tar.gz

Kemudian salin ini seperti sebelumnya, lalu lakukan yang sebaliknya:

tar xzf foo.tar.gz

Jika Anda menggunakan SSH untuk mentransfer file, Anda dapat melewati langkah perantara untuk memiliki file untuk disimpan dan ditransfer:

tar cf - directory | gzip -9c | ssh user@hostname "cd /destdir ; tar xzvf -"

Ini sangat membantu jika file tar yang Anda hasilkan sangat besar dan mungkin tidak cocok pada partisi tujuan bersama dengan data yang tidak terkompresi. Dalam hal ini, menggunakan rsync mungkin lebih baik.

Geoff Fritz
sumber
1

Kedengarannya seperti Anda seharusnya menggunakan tar (dengan opsi gzip):

# -z  : pipe through gzip
# -cf : create file
tar -zcf new.tgz /path-to-directory

kemudian dengan file new.tgz yang dihasilkan:

# z : gzip
# x : extract
# p : keep permissions
tar zxpf new.tgz

EDIT

Lalu apa gunanya gzip -r? - jeffp 37 mnt yang lalu

gzip adalah kompresor aliran - ia tidak benar-benar melihat isi dari apa yang Anda kompres melebihi apa yang diperlukan untuk membuatnya lebih kecil sehingga tidak memiliki konsep direktori.

Sama seperti catatan tambahan, saya menemukan bzip2 untuk melakukan pekerjaan kompresi yang jauh lebih baik daripada gzip - walaupun lebih lambat.

# -j  : pipe through bzip2
# -cf : create file
tar -jcf new.tar.bzip2 /path-to-directory

bunzip2 new.tar.bzip2
Lokal
sumber