2011-08-22 42 views
31

Khi tôi làm unzip -l zipfilename, tôi thấyExtract danh sách tên tập tin trong một kho lưu trữ zip khi `giải nén -l`

1295627 08-22-11 07:10 A.pdf 
473980 08-22-11 07:10 B.pdf 
... 

Tôi chỉ muốn xem tên tập tin. Tôi thử điều này

unzip -l zipFilename | cut -f4 -d" " 

nhưng tôi không nghĩ dấu phân cách chỉ là " ".

+0

Nếu số lượng dấu cách được cố định, bạn phải tiến lên trường tương ứng, như '-f7' hoặc hơn. Nếu vị trí * của tên tệp được cố định, hãy sử dụng '-b' để thay thế. –

+0

Liên quan đến [SU]: [Xem tệp trong kho lưu trữ ZIP trên Linux] (http://superuser.com/q/216617/269404) – Palec

Trả lời

24

Giả sử không ai trong số các tập tin có các khoảng trống trong tên:

unzip -l filename.zip | awk '{print $NF}' 

ra giải nén của tôi đã cả một header và footer, vì vậy kịch bản awk trở thành:

unzip -l filename.zip | awk '/-----/ {p = ++p % 2; next} p {print $NF}' 

Phiên bản xử lý s tên tập tin với không gian:

unzip -l filename.zip | awk ' 
    /----/ {p = ++p % 2; next} 
    $NF == "Name" {pos = index($0,"Name")} 
    p {print substr($0,pos)} 
' 
+2

Sẽ có thể nếu bạn có thể giải thích kịch bản lệnh 'awk' của bạn một chút. hoàn toàn hiểu nếu bạn không có thời gian cho nó. –

+4

Awk có biến số 'NF' trên mỗi dòng là số trường. '$ NF' là giá trị của trường cuối cùng, vì vậy đó là cách bạn lấy tên tệp. Kịch bản thứ hai hoạt động bằng cách thiết lập biến 'p' thành true khi dòng đầu tiên với" ----- "xuất hiện, và khối' {printf $ NF} 'chỉ thực hiện nếu' p' là đúng. –

+5

Bạn có thể loại bỏ đầu trang và chân trang bằng cách sử dụng tùy chọn -qq: 'unzip -l -qq filename.zip'. Sau đó, câu lệnh awk đơn giản hơn sẽ hoạt động. – amicitas

3

Sử dụng awk:

unzip -l zipfilename | awk '{print $4}' 
+0

Mặc dù, hãy cẩn thận với tên tệp ác chứa khoảng trống. – nos

6

Nếu bạn cần để phục vụ cho tên tập tin với không gian, hãy thử:

unzip -l zipfilename.zip | awk -v f=4 ' /-----/ {p = ++p % 2; next} p { for (i=f; i<=NF;i++) printf("%s%s", $i,(i==NF) ? "\n" : OFS) }' 
93

Cách dễ nhất để làm điều này là sử dụng lệnh sau:

unzip -Z -1 archive.zip 

hoặc

zipinfo -1 archive.zip 

Điều này sẽ chỉ liệt kê tên tệp, một tên trên mỗi dòng.

Hai lệnh chính xác tương đương. Tùy chọn -Z cho phép giải nén để xử lý phần còn lại của các tùy chọn dưới dạng tùy chọn zipinfo. Xem trang người đàn ông cho unzipzipinfo.

Các vấn đề liên quan