วิธีแสดงรายการไฟล์ใน zip โดยไม่มีข้อมูลเพิ่มเติมในบรรทัดคำสั่ง


37

ในบรรทัดคำสั่ง bash ของฉันเมื่อฉันใช้unzip -l test.zipฉันจะได้ผลลัพธ์เช่นนี้

Archive:  test.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
   810000  05-07-2014 15:09   file1.txt
   810000  05-07-2014 15:09   file2.txt
   810000  05-07-2014 15:09   file3.txt
---------                     -------
  2430000                     3 files

แต่ฉันสนใจเฉพาะบรรทัดที่มีรายละเอียดไฟล์

ฉันพยายามทำการกรองโดยใช้ grep เช่นนี้:

unzip -l test.zip | grep -v Length | grep -v "\-\-\-\-" | g -v Archive | grep -v " files"

แต่มันยาวและมีแนวโน้มที่จะเกิดข้อผิดพลาด (เช่นชื่อไฟล์ที่เก็บถาวรในรายการนี้จะลดลง)

มีตัวเลือกอื่น ๆ ด้วย unzip -l (ฉันตรวจสอบหน้า man unzip และไม่พบสิ่งใด) หรือเครื่องมืออื่นที่จะทำ?

เป็นสิ่งสำคัญสำหรับฉันที่จะไม่คลายซิปไฟล์เก็บถาวร แต่เพียงเพื่อดูว่าไฟล์อยู่ข้างใน


คำตอบที่ได้รับการยอมรับดีกว่านี้มาก แต่ฉันต้องการที่จะสังเกตว่าอะไรก็ตามที่มีหลาย ๆgrepสามารถ refactored เป็นสคริปต์ Awk มักจะมีความแม่นยำที่ดีขึ้นมาก awk 'NR >3 { if (/^ *---/) exit 0; print }'จะตัดสามบรรทัดแรกเช่นเดียวกับส่วนท้ายและยังจะอยู่ในมือของได้อย่างง่ายดายเพียงแค่แยกชื่อไฟล์ (คำใบ้: print substr($0, 29))
tripleee

ใช่ฉันเห็นด้วยอย่างสมบูรณ์นั่นคือเหตุผลที่ฉันถามคำถามนั้นเพื่อให้ได้วิธีที่ดีกว่าและมีศักยภาพ
рüффп

คำตอบ:


55
zipinfo -1 file.zip

หรือ:

unzip -Z1 file.zip

จะแสดงเฉพาะไฟล์

หากคุณยังต้องการข้อมูลเพิ่มเติมสำหรับชื่อไฟล์แต่ละชื่อคุณสามารถทำได้:

unzip -Zl file.zip | sed '1,2d;$d'

หรือ:

unzip -l file.zip | sed '1,3d;$d' | sed '$d'

หรือ (สมมติว่า GNU head):

unzip -l file.zip | tail -n +4 | head -n -2

ขอบคุณ sed ที่ทรงพลัง ... สิ่งที่ฉันต้องการ; เครื่องมือ zipinfo ก็น่าสนใจฉันก็ไม่รู้เหมือนกัน
рüффп

มีวิธีละเว้นไดเรกทอรีหรือไม่ unzip -Z1 zipfile.zipจะส่งออก: directory / และ directory / file.extension (หมายเหตุ: ชื่อไดเรกทอรีที่มี. น่าจะเป็นดังนั้นการเพิ่ม a | grep .ไม่ทำงาน)
Matt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.