Cara gzip semua file di semua sub-direktori menjadi satu file terkompresi di bash


201

Kemungkinan Duplikat:
gzipping satu set direktori dan membuat file terkompresi tar

Posting ini menjelaskan cara gzip setiap file secara individual dalam struktur direktori. Namun, saya perlu melakukan sesuatu yang sedikit berbeda. Saya perlu menghasilkan satu file gzip besar untuk semua file di bawah direktori tertentu. Saya juga harus dapat menentukan nama file keluaran untuk file terkompresi (misalnya, files.gz) dan menimpa file file terkompresi lama jika sudah ada.


gzippada dasarnya kompres hanya satu file. Untuk memasukkan banyak file ke dalam satu file untuk gzipping selanjutnya, gunakan tar.
Thomas

Jawaban:


387
tar -zcvf compressFileName.tar.gz folderToCompress

semua yang ada di folderToCompress akan masuk ke compressFileName

Sunting: Setelah meninjau dan berkomentar, saya menyadari bahwa orang mungkin bingung dengan compressFileName tanpa ekstensi. Jika mau, Anda dapat menggunakan ekstensi .tar.gz (seperti yang disarankan) dengan compressFileName


2
Terima kasih. Apakah ini akan memampatkan semuanya di bawah "folderToCompress" (yaitu, secara rekursif)?
Doug

2
semua yang ada di folderToCompress akan masuk ke compressFileName
amitchhajer

80
Anda mungkin ingin memilih compressFileNamejadi itu termasuk .tar.gzekstensi atau Anda akan membuat orang lain gila.
drewish

9
Ini juga berfungsi untuk sejumlah direktori sembarang, mis. tar -zcvf two-dirs.tar.gz dir-one dir-twoAkan membuat arsip yang berisi dua direktori.
Zoltán

5
Juga berfungsi dengan *mengompresi semua dalam dir saat ini, yaitu .:tar -zcvf all.tar.gz *

61

ada banyak metode kompresi yang bekerja secara command line secara rekursif dan bagus untuk mengetahui siapa audiens akhirnya.

yaitu jika ingin dikirim ke seseorang yang menjalankan windows maka zip mungkin yang terbaik:

zip -r file.zip folder_to_zip

unzip filenname.zip

untuk pengguna linux lain atau self tar Anda hebat

tar -cvzf filename.tar.gz folder

tar -cvjf filename.tar.bz2 folder  # even more compression

#change the -c to -x to above to extract

Seseorang harus berhati-hati dengan tar dan bagaimana hal-hal yang ditumpuk / diekstraksi, misalnya jika saya menjalankan

cd ~
tar -cvzf passwd.tar.gz /etc/passwd
tar: Removing leading `/' from member names
/etc/passwd


pwd

/ home / myusername

tar -xvzf passwd.tar.gz

ini akan membuat / home / nama pengguna / etc / passwd

tidak yakin apakah semua versi tar melakukan ini:

 Removing leading `/' from member names

18

Kiriman @amitchhajer berfungsi untuk GNU tar. Jika seseorang menemukan posting ini dan membutuhkannya untuk bekerja pada GNUsistem NON , mereka dapat melakukan ini:

tar cvf - folderToCompress | gzip > compressFileName

Untuk memperluas arsip:

zcat compressFileName | tar xvf -

2
Selain menjadi portable, solusi ini berguna jika Anda ingin memberikan argumen ke gzip (misalnya, --test atau --best), karena afaik bahkan GNU tar tidak menyediakan cara untuk mengirim argumen ke gzip.
Timothy Woods

Ini serbaguna, karena Anda juga dapat menggunakan kompresor lain. Misalnya pigzyang lebih cepat karena dapat memanfaatkan cpu lebih baik (implementasi zip multi-threaded).
Ortwin Angermeier
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.