ค้นหาจำนวนภาพภายในไดเรกทอรี


2

ฉันต้องการค้นหาจำนวนไฟล์ภาพภายในไดเรกทอรี ฉันลงเอยด้วยการใช้สิ่งนี้:

find . -type f  -exec file {} \; | grep -c -i 'image'

นี่รู้สึกเหมือนเป็นวิธีที่ไม่มีประสิทธิภาพในการทำ ฉันสามารถคิดวิธีอื่นในการทำเช่นนั้นโดยใช้คำสั่ง OR แต่ฉันไม่สามารถแยกแยะหน้าคนได้ว่าจะทำสิ่งนี้ได้อย่างไร

ความคิดใด ๆ ที่ว่าสิ่งนี้สามารถทำได้อย่างมีประสิทธิภาพมากขึ้น? ฉันไม่ต้องการรันคำสั่งด้านบนในไดเรกทอรีที่มีไฟล์จำนวนมากและใช้เวลานาน

คำตอบ:


5

หากคุณต้องการค้นหาภาพตามส่วนขยายคุณสามารถใช้คำสั่งต่อไปนี้:

find -type f -name *.gif -o -name *.jpg -o -name *.bmp

แน่นอนคุณต้องแสดงรายการส่วนขยายทั้งหมดที่คุณสนใจ

| wc -lที่จะได้รับการนับคุณสามารถผนวก


1
จะดีกว่าถ้าใช้-inameเพื่อจับคู่ตัวพิมพ์เล็กและตัวพิมพ์ใหญ่
jollyroger

4

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

find . -type f  -exec file {} \+ | grep -c -i 'image'

คุณจะพบปัญหาหากพบไฟล์มากกว่าที่fileจะเป็นข้อโต้แย้ง คุณสามารถไปป์xargsกับ--max-argsตัวเลือกถ้าเป็นกรณี


1

หากคุณต้องการค้นหาไฟล์ตามประเภทไฟล์ mime ในกรณีนี้ "รูปภาพ" คุณจะต้องใช้คำสั่งต่อไปนี้

   find . -type f -print0 | xargs -0 file -i | grep -i image | wc -l

1
เขาทำให้มันทำงานได้แล้ว เขาขอวิธีที่มีประสิทธิภาพมากขึ้น ฉันสงสัยว่าfind | xargsรูปแบบคืออาจจะมีประสิทธิภาพมากขึ้นเพราะมันจะเรียกfileครั้งเดียวที่วิธีการเดิมจะเรียกมันครั้งเดียวสำหรับทุกไฟล์พบ จะมีประสิทธิภาพมากกว่าgrep -ci image grep -i image | wc -l
Ladadadada
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.