Đếm số lượng các mục cấp cao nhất trong kho lưu trữ ZIP


2

Tôi đang tìm kiếm một lệnh đầu cuối để đếm số lượng các mục cấp cao nhất trong kho lưu trữ ZIP. Tôi biết rằng zip -l archive.zipsẽ hiển thị số lượng tập tin, nhưng điều này hiển thị tất cả các tập tin, không chỉ các mục cấp cao nhất. Nếu archive.zipsẽ giải nén theo sau (* biểu thị mức cao nhất)

* Dir1
    File1
    File2
* Dir2
    File3
    File4
    File5
    File6
* Dir3
* File7
* File8

sau đó tôi muốn một chương trình để đầu ra 5.


Sử dụng unzip -l archive.zip|grep /|grep -v "/.*/"|wc -l. Bộ lọc đầu tiên chỉ hiển thị các dòng có tệp, thứ hai loại bỏ các thư mục con và thứ ba trả về số lượng dòng. Nếu kho lưu trữ có đường dẫn tuyệt đối, bạn sẽ cần cho phép hai dấu gạch chéo và loại bỏ ba hoặc nhiều hơn.
AFH

Điều này cho thấy số lượng các mặt hàng không cấp cao nhất. Nhưng tôi đoán tôi chỉ có thể trừ đi đầu ra unzip -l archive.zip | grep -v / | wc -l, phải không? Xin lỗi vì bài viết gốc của tôi không rõ ràng
BallpointBen

Nếu bạn bỏ lỡ, |wc -lbạn sẽ thấy các tệp được xem xét và đó là các tệp cấp cao nhất. Có một lỗi (!): Nếu đường dẫn lưu trữ chứa một lỗi /này sẽ được tính, vì vậy bạn cần một bộ lọc bổ sung để loại trừ nó, ví dụ: thay thế grep /bằng grep "^ .*/".
AFH

Câu trả lời:


0

Lấy cảm hứng từ AFH để sử dụng giải pháp này

zipinfo -1 archive.zip | 
    egrep '^[^/]+/?$' | 
    egrep -v '__MACOSX' | 
    wc -l |
    awk '{$1=$1};1'

Những gì nó làm:

Get list of files in archive
Filter for top-level files or dirs; must either contain no '/' or end in '/'
Remove lines containing __MACOSX (for archives created on a Mac)
Get line count
Remove trailing whitespace; http://unix.stackexchange.com/a/205854/169465
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.