วิธีแสดงเนื้อหาของไฟล์. zip ทั้งหมดในโฟลเดอร์และ grep สำหรับไฟล์ใดไฟล์หนึ่ง


28

ฉันมีไฟล์ zip 348 ไฟล์และฉันต้องการค้นหาไฟล์ที่อยู่ในไฟล์ zip อย่างใดอย่างหนึ่งunzip -lไม่ทำงานกับ wild card ใช่ไหม

ฉันจะแสดงรายการเนื้อหาของ.zipไฟล์ทั้งหมดและgrepผ่านรายการที่รวมของไฟล์ทั้งหมดที่มีอยู่ในรหัสไปรษณีย์ได้อย่างไร

คำตอบ:


17

การใช้zipinfoเป็นทางออกที่ดีที่นี่ อย่างไรก็ตามโดยทั่วไปเมื่อใดก็ตามที่คุณต้องการใช้คำสั่งกับรายการไฟล์และคำสั่งไม่ยอมรับรายการไฟล์คุณสามารถใช้การforวนซ้ำได้:

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

หากไฟล์ที่คุณกำลังค้นหามีช่องว่างในมันเหมือน: your fileในการแสดงออกปกติ grep grep "\.zip\|your\ file"คุณต้องหนีพื้นที่ที่มีการทับขวาเหมือนทุก


ทำงานได้อย่างสมบูรณ์แบบปัญหาเดียวก็คือมันไม่ได้แสดงชื่อของ zip
Eduard Florinescu

ฉันแก้ไขคุณโพสต์และเพิ่มการแสดงออกปกติเพื่อแสดงนอกจากนี้ยังมีชื่อไฟล์ที่พบการตั้งค่า +1 และยอมรับ
Eduard Florinescu

โอ้ใช่ฉันลืมคำพูดรอบ ๆ การโต้แย้งไปunzipแล้วว่าน่าอายแค่ไหน
Konrad Rudolph

1
@JaySullivan อย่าใช้รหัสนี้มันจะล้มเหลวสำหรับเส้นทางที่มีช่องว่าง อย่าไปป์ผลลัพธ์ของ ls คุณสามารถใช้findแทน
Konrad Rudolph

12

zipinfoคุณสามารถใช้ มันรวมอยู่ในการติดตั้งเริ่มต้นของ Ubuntu ตรวจสอบหน้าคู่มือสำหรับข้อมูลเพิ่มเติม

ตัวอย่างเช่นหากต้องการค้นหารูปแบบsetupในไฟล์ zip ในไดเร็กทอรีปัจจุบันให้ใช้คำสั่งนี้:

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

ฉันได้รับcaution: filename not matched: case1.zip... caution: filename not matched: case348.zipสำหรับทุก zip ทดสอบบน Ubuntu OS สองอัน, 11.10 และ 12.04
Eduard Florinescu

@EduardFlorinescu ลองคำตอบที่ปรับปรุงแล้ว แม้ว่าคำตอบจะใช้ได้สำหรับฉัน
Anwar

ปัญหาคือไฟล์อาจมีไฟล์นั้นsetupและทำให้เกิดข้อผิดพลาดเหมือนกันถึงแม้ว่ามันจะทำงานได้เช่นนี้:zipinfo -l * | grep "setup"
Eduard Florinescu

ฉันแก้ไขคำตอบ ฉันคิดว่ามันแข็งแกร่งขึ้นแล้วในตอนนี้
อันวาร์

1
ขอบคุณ +1 ด้วยความพยายาม แต่ก็ยังใช้งานไม่ได้หากไฟล์ zip มีช่องว่างในชื่อ
Eduard Florinescu

6

ในการแสดงรายการไฟล์ในไฟล์ zip คุณสามารถใช้คำสั่งต่อไปนี้

unzip -l

หากต้องการ grep ไฟล์บีบอัดที่บีบอัดคุณควรใช้ยูทิลิตี้บีบอัดไฟล์เก็บถาวรที่สร้างขึ้นเพื่อทำงานกับรูปแบบไฟล์เก็บถาวรแบบนั้น

สำหรับไฟล์เก็บถาวร zip:

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

สำหรับคลังเก็บ 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'.

มีเครื่องมืออีกสองสามอย่างที่ทำงานกับคลังเก็บด้วยเช่นกัน คุณสามารถส่งท่อออกไปใส่ grep เพื่อทำสิ่งเดียวกัน

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

หรือคุณสามารถใช้ฟังก์ชันการค้นหาของเครื่องมือเหล่านี้

zless
zmore
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.