Cách gzip tất cả các tệp trong tất cả các thư mục con thành một tệp nén trong bash


201

Có thể trùng lặp:
tạo ra một tập hợp các thư mục và tạo một tệp nén tar

Bài đăng này mô tả cách gzip từng tệp riêng lẻ trong một cấu trúc thư mục. Tuy nhiên, tôi cần phải làm một cái gì đó hơi khác nhau. Tôi cần tạo một tệp gzip lớn cho tất cả các tệp trong một thư mục nhất định. Tôi cũng cần có khả năng chỉ định tên tệp đầu ra cho tệp nén (ví dụ: files.gz) và ghi đè lên tệp tệp nén cũ nếu đã tồn tại.


gzipbởi bản chất của nó chỉ nén một tập tin duy nhất. Để đặt nhiều tệp vào một tệp cho lần gzipping tiếp theo, hãy sử dụng tar.
Thomas

Câu trả lời:


387
tar -zcvf compressFileName.tar.gz folderToCompress

mọi thứ trong thư mụcToCompress sẽ chuyển đến nénFileName

Chỉnh sửa: Sau khi xem xét và nhận xét, tôi nhận ra rằng mọi người có thể bị nhầm lẫn với nénFileName mà không có tiện ích mở rộng. Nếu bạn muốn, bạn có thể sử dụng phần mở rộng .tar.gz (như được đề xuất) với tệp nénFileName


2
Cảm ơn. Điều này sẽ nén mọi thứ trong "thư mục ToCompress" (nghĩa là đệ quy)?
Doug

2
mọi thứ trong thư mụcToCompress sẽ chuyển đến
nénFileName

80
Bạn có thể muốn chọn compressFileNameđể nó bao gồm .tar.gztiện ích mở rộng hoặc bạn sẽ khiến mọi người khác phát điên.
thu hút

9
Điều này cũng hoạt động cho một số lượng thư mục tùy ý, ví dụ tar -zcvf two-dirs.tar.gz dir-one dir-twosẽ tạo một kho lưu trữ chứa hai thư mục.
Zoltán

5
Cũng hoạt động với *để nén mọi thứ trong thư mục hiện tại, tức là:tar -zcvf all.tar.gz *

61

có rất nhiều phương thức nén hoạt động theo dòng lệnh đệ quy và thật tốt để biết ai là khán giả cuối cùng.

tức là nếu nó được gửi cho ai đó đang chạy windows thì zip có lẽ là tốt nhất:

zip -r file.zip folder_to_zip

unzip filenname.zip

đối với người dùng linux khác hoặc bản thân bạn rất tuyệt

tar -cvzf filename.tar.gz folder

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

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

Người ta phải cẩn thận với tar và cách mọi thứ được tarred up / trích xuất, ví dụ nếu tôi chạy

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


pwd

/ nhà / tên người dùng

tar -xvzf passwd.tar.gz

cái này sẽ tạo / home / myusername / etc / passwd

không chắc chắn nếu tất cả các phiên bản của tar làm điều này:

 Removing leading `/' from member names

18

Bài đăng của @amitchhajer hoạt động cho GNU tar. Nếu ai đó tìm thấy bài đăng này và cần nó hoạt động trên GNUhệ thống NON , họ có thể làm điều này:

tar cvf - folderToCompress | gzip > compressFileName

Để mở rộng kho lưu trữ:

zcat compressFileName | tar xvf -

2
Ngoài việc có thể mang theo, giải pháp này rất hữu ích nếu bạn muốn truyền đối số cho gzip (ví dụ: --test hoặc --best), vì afaik thậm chí GNU tar không cung cấp cách gửi đối số cho gzip.
Timothy Woods

Điều này là linh hoạt, vì bạn cũng có thể sử dụng máy nén khác. Ví dụ pigz, tốc độ nhanh hơn vì nó có thể sử dụng cpu tốt hơn (triển khai zip đa luồng).
Ortwin Angermeier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.