ค้นหาและค้นหาภายในการบีบอัดไฟล์ทั้งหมด


9

ฉันต้องการสแกนฮาร์ดไดรฟ์ของฉันสำหรับคอลเลกชันไฟล์บีบอัดทั้งหมดเช่น zip, gzip, bzip และอื่น ๆ และมีเนื้อหาของไฟล์ที่ค้นหาไฟล์บางประเภท (เช่นรูปภาพ) ป้องกันไวรัสทำมันดังนั้นผมเชื่อว่าควรจะมีวิธี


@Rinzwind ที่จะค้นหาภายในไฟล์เก็บที่ไม่ได้อยู่ในรายการของแฟ้ม ก็จะพบไฟล์ที่มีแต่ไม่foo foo.png
terdon

นี่อาจเป็นประโยชน์ในการตรวจสอบ Zip Bomb! +1
Sharad Gautam

คำตอบ:


17

วิธีที่ง่ายที่สุดคือการแสดงรายการเนื้อหาของไฟล์เก็บถาวรและค้นหาไฟล์ของส่วนขยายที่เกี่ยวข้อง ตัวอย่างเช่นกับzipไฟล์:

$ zip -sf foo.zip | grep -iE '\.png$|\.jpg$'
  file1.jpg
  file1.png
  file2.jpg
  file2.png

-sfตัวเลือกที่บอกzipไปยังรายการไฟล์ที่มีอยู่ในที่เก็บ จากนั้นgrepจะค้นหา.pngหรือ.jpgที่อยู่ท้ายบรรทัด ( $) -Eช่วยให้การแสดงออกปกติขยายเพื่อให้เราสามารถใช้|เป็นหรือและ-iทำให้ตายกรณีการจับคู่

อย่างไรก็ตามเครื่องมือเก็บถาวรแต่ละอันมีคำสั่งต่างกันในการแสดงเนื้อหา ฉันได้เขียนสคริปต์ที่สามารถจัดการกับสคริปต์ที่ได้รับความนิยมมากที่สุด หากคุณบันทึกสคริปต์นั้นเป็นlist_compressed.shคุณสามารถเรียกใช้:

list_compressed.sh | grep -iE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$'

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


หากคุณต้องการค้นหาไฟล์เก็บถาวรทั้งหมดที่มีไฟล์ภาพในฮาร์ดไดรฟ์ของคุณให้รวมข้างต้นด้วยfind:

find / -name '*.gz' -o -name '*.tgz' -o -name '*.zip' -print0 |
    while IFS= read -r -d '' arch; do    
        list_compressed.sh "$arch" | 
            grep -qiE '\.png$|\.jpg$|\.jpeg$|\.gif$|\.tif$|\.tiff$' &&
                echo "$arch contains image(s)"
    done

หาคำสั่งจะค้นหาทั้งหมด.gz, .tgzหรือ.zipไฟล์ (คุณสามารถเพิ่มส่วนขยายให้มากที่สุดเท่าที่คุณต้องการ) ผู้ที่จะผ่านไปแล้วผ่านสคริปต์ของฉัน -qไม่ใส่ grep เป็นออกตามปกติไม่มีอะไรจะพิมพ์ && echoจะพิมพ์ชื่อที่เก็บของเฉพาะในกรณีที่grepประสบความสำเร็จ


ตามคำถามเดิมของฉันฉันต้องการ "สแกนฮาร์ดไดรฟ์ของฉันสำหรับคอลเลกชันไฟล์บีบอัดทั้งหมดเช่น zip ที่มีภาพ" คุณได้ช่วยในการตรวจสอบจดหมายเหตุด้วยตนเอง แต่ฉันแค่ต้องการระบุว่าจดหมายเหตุใดที่มีภาพ
6ft Dan

@ 6ftDan ขอโทษฉันไม่เคยเห็นเดิม โปรดย้อนกลับหรือแก้ไขการแก้ไขใด ๆ ที่เปลี่ยนความหมายของโพสต์ของคุณ ดูคำตอบล่าสุดสำหรับวิธีการค้นหาระบบไฟล์ทั้งหมด
terdon

เยี่ยมมาก แต่เนื่องจากคุณเป็นคนตัวพิมพ์ใหญ่คุณอาจต้องการค้นหาตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก?
คอส

@kos อืมว่าพอง่ายที่จะทำเพียงแค่เปลี่ยนไป-name -inameอย่างไรก็ตามมีจุดเล็ก ๆ น้อย ๆ เช่นโปรแกรมบีบอัดหลายตัว (gzip เป็นต้น) ต้องการส่วนขยายที่เฉพาะเจาะจง GZจะไม่ทำงาน
terdon

3

ไม่สูงเท่าเทอร์ดอน แต่จะทำเช่นนี้:

บันทึกรหัสต่อไปนี้ในโฟลเดอร์ที่ทุกอยู่ของคุณรหัสในขณะที่finda.shหรือชื่ออื่นใดตามที่คุณชอบ:

for file in *.*; do
    if ( 7z l -slt "$file"> /tmp/$file.log); then
       echo $file:; cat /tmp/$file.log | grep -iE 'Path*'> $file.log && cat $file.log
    fi
done

จากนั้นในเอกสารทั้งหมดของคุณจะอยู่ในนั้นให้รันและนี่คือผลลัพธ์:

./finda.sh 
one.7z:
Path = one/abradabra.png
Path = one/birb.png
three.rar:
Path = three/blah.png
Path = three/qwa0g.jpg
two.zip:
Path = two/whut.png

ตามคำถามเดิมของฉันฉันต้องการ "สแกนฮาร์ดไดรฟ์ของฉันสำหรับคอลเลกชันไฟล์บีบอัดทั้งหมดเช่น zip ที่มีภาพ" คุณได้ช่วยในการตรวจสอบจดหมายเหตุด้วยตนเอง แต่ฉันแค่ต้องการระบุว่าจดหมายเหตุใดที่มีภาพ
6ft Dan

@ 6ftDan ฉันคิดว่าเป็นไปได้ แต่อาจใช้เวลาสักครู่ ในช่วงเวลานั้นฉันได้เพิ่มการปรับปรุงบางอย่างกับสคริปต์ของฉันเล็กน้อยช่วยด้วย terdon
blade19899

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