Cách nén danh sách các tệp trong Linux


17

Tôi có nhiều tập tin tôi cần để nén vào một thư mục. Tôi không muốn nén tất cả các tệp trong thư mục, nhưng chỉ những tệp phù hợp với một truy vấn nhất định.

tôi đã làm

grep abc file-* > out.txt 

để tạo một tệp với tất cả các phiên bản "abc" trong mỗi tệp. Tôi cần các tập tin chính mình. Làm thế nào tôi có thể bảo bash chỉ nén các tệp đó?


Ký tự đại diện không hoạt động? Tại sao? Nếu tôi có thể hỏi ...
jherran

@jherran Tôi không muốn nén tất cả các tệp trong thư mục, chỉ những tệp phù hợp với một truy vấn nhất định. Tôi đã grep abc file-* > out.txtlàm một tập tin với tất cả các trường hợp "abc" trong mỗi tập tin. Tôi cần các tập tin chính mình.
john mangual

Những gì @jherran có nghĩa là zip ZipFile.zip file-*, đó là cách rõ ràng để làm điều đó. Bạn sẽ chỉ cần một tệp trung gian nếu bạn đang sử dụng phức tạp findhoặc ghép các danh sách tệp từ các tìm kiếm khác nhau.
AFH

Câu trả lời:


31

Rất đơn giản:

zip archive -@ < out.txt

Đó là, nếu out.txttệp của bạn chứa một tên tệp trên mỗi dòng. Nó sẽ thêm tất cả các tệp từ out.txtmột tệp lưu trữ được gọi archive.zip.

Các -@làm cho tùy chọn zipđọc từ STDIN.

Nếu bạn muốn bỏ qua việc tạo một out.txttệp tạm thời , bạn cũng có thể sử dụng grepkhả năng của mình để in tên tệp. -rcho phép tìm kiếm đệ quy (có thể không cần thiết trong trường hợp của bạn) và -lchỉ in tên tệp:

grep -rl "abc" file-* | zip archive -@

Hoạt động độc đáo, ngoại trừ tôi có một tệp danh sách trong đó có khoảng trắng trong tên tệp. Tôi đã thử cả hai thoát chúng với `` và không thoát chúng, một lần trong dấu ngoặc kép và một lần không có dấu ngoặc kép quanh tên tệp (một dòng - một tên tệp). Không có gì làm việc cho đến nay.
Thomas W.

2
Tôi đã làm cho nó hoạt động với `\` khoảng trống thoát và không có dấu ngoặc kép trong tệp và sau đây:cat out.txt | while read line ; do xargs zip archive.zip $line ; done
Thomas W.

nếu bạn muốn nén các tệp có tên tương tự, bạn có thể thửzip archive.zip $(ls common_name*)
chepe263

@ chepe263 Điều này sẽ phá vỡ nếu các tệp có khoảng trắng trong đường dẫn của chúng. Nó thường không khuyến khích phân tích đầu ra ls.
slhck

Đối với bất kỳ ai khác trên máy Mac sử dụng tính năng lập chỉ mục của công cụ tìm kiếm, -@cú pháp tùy chọn hoạt động tốt kể từ 10.16, mặc dù trang man vẫn bao gồm ngôn ngữ vềnot on MacOS
Aidan Miles

0

Các lựa chọn thay thế cho câu trả lời được chấp nhận, từ đây :

cat out.txt | zip -@ zipfile.zip
cat out.txt | zip -@ - > zipfile.zip
zip zipfile.zip $(cat out.txt) -r
zip zipfile.zip -r . -i@out.txt
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.