Làm cách nào để liệt kê nội dung của tất cả các tệp .zip trong một thư mục và grep cho một tệp cụ thể?


28

Tôi có 349 tệp zip và tôi muốn tìm một tệp nằm trong một trong các tệp zip, unzip -lkhông hoạt động với thẻ hoang dã?

Làm cách nào tôi có thể liệt kê nội dung của tất cả .zipcác tệp và grepthông qua danh sách được hợp nhất của tất cả các tệp có trong các khóa?

Câu trả lời:


17

Sử dụng zipinfolà một giải pháp tốt ở đây. Tuy nhiên, nói chung bất cứ khi nào bạn muốn áp dụng một lệnh cho danh sách các tệp và lệnh không chấp nhận danh sách các tệp, bạn có thể sử dụng một forvòng lặp:

for file in *.zip; do
    unzip -l "$file"
done \
| grep "\.zip\|setup"

Nếu tệp bạn đang tìm kiếm có khoảng trắng trong đó như : your file, trong biểu thức chính quy grep, bạn cần thoát mọi khoảng trắng bằng dấu gạch chéo ngược grep "\.zip\|your\ file".


Hoạt động hoàn hảo, vấn đề duy nhất là nó không hiển thị tên của zip,
Eduard Florinescu

Tôi đã chỉnh sửa bài đăng của bạn và thêm biểu thức chính quy để hiển thị tên tệp nơi tìm thấy thiết lập, +1 và chấp nhận
Eduard Florinescu

Ồ vâng, tôi đã quên các trích dẫn xung quanh cuộc tranh luận unzip, thật đáng xấu hổ.
Konrad Rudolph

1
@JaySullivan Đừng sử dụng mã này, nó sẽ thất bại đối với các đường dẫn chứa khoảng trắng. Không bao giờ đường ống đầu ra của ls. Bạn có thể sử dụng findthay thế.
Konrad Rudolph

12

Bạn có thể sử dụng zipinfo. Nó được bao gồm trong cài đặt Ubuntu mặc định. Kiểm tra trang hướng dẫn để biết thêm.

Ví dụ: để tìm mẫu setuptrong một loạt các tệp zip trong thư mục hiện tại, hãy sử dụng lệnh này:

find ./ -iname *zip 2> /dev/null -print0 | xargs -0 zipinfo | grep setup

Tôi nhận được một caution: filename not matched: case1.zip... caution: filename not matched: case348.zipcho mỗi zip, được thử nghiệm trên hai hệ điều hành Ubuntu, 11.10 và 12.04.
Eduard Florinescu

@EduardFlorinescu Hãy thử câu trả lời cập nhật. Mặc dù câu trả lời đã có hiệu quả với tôi
Anwar

vấn đề là tập tin có thể chứa lỗi đó setupvà nó cũng gây ra lỗi tương tự, mặc dù nó hoạt động như thế này:zipinfo -l * | grep "setup"
Eduard Florinescu

Tôi chỉnh sửa câu trả lời. Tôi nghĩ rằng nó mạnh mẽ hơn bây giờ
Anwar

1
Cảm ơn, +1 vì nỗ lực, nhưng nó vẫn không hoạt động nếu tệp zip có khoảng trắng trong tên của nó.
Eduard Florinescu

6

Để liệt kê các tệp trong kho lưu trữ zip, bạn có thể sử dụng lệnh sau.

unzip -l

Để grep một kho lưu trữ nén, bạn nên sử dụng các tiện ích lưu trữ nén được xây dựng để hoạt động với loại định dạng lưu trữ đó.

Đối với lưu trữ zip:

zipgrep --help  
usage: zipgrep [egrep_options] pattern zipfile [members...]
Uses unzip and egrep to search the zip members for a string or pattern.

Đối với tài liệu lưu trữ tar:

zgrep --help
Usage: /bin/zgrep [OPTION]... [-e] PATTERN [FILE]...
Look for instances of PATTERN in the input FILEs, using their
uncompressed contents if they are compressed.

OPTIONs are the same as for 'grep'.

Có một vài công cụ khác cũng hoạt động với tài liệu lưu trữ. Bạn có thể đặt ống ra vào grep để làm điều tương tự.

zcat
zcat my.archive.zip | grep "some text"

Hoặc bạn có thể sử dụng chức năng tìm kiếm của các công cụ này

zless
zmore
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.