ฉันคิดว่าสิ่งนี้สามารถทำได้ในรูปแบบ 1 ซับ แต่มันค่อนข้างยุ่งยากดังนั้นฉันจึงสร้างสคริปต์เพื่อให้ง่ายต่อการเปิดตัวและแก้ไขและเรียกมันว่าfindvids.sh
นี่เป็นสิ่งที่ใช้ได้ผลสำหรับฉัน
หมายเหตุ: ฉันอาจไม่ครอบคลุมประเภทไฟล์วิดีโอทั้งหมดแต่ฉันแน่ใจว่าฉันมีไฟล์เกือบทุกประเภท ข้อยกเว้นหนึ่งที่น่าสังเกตคือ. mkv เนื่องจากเป็นรูปแบบเป้าหมายสำหรับโครงการและฉันไม่ต้องการค้นหาไฟล์ที่ได้รับการประมวลผลแล้ว มันควรจะง่ายมากที่จะเพิ่มรูปแบบเพิ่มเติม (ส่วนขยาย) ลงในสคริปต์เพื่อให้เหมาะกับความต้องการของคุณโดยการตรวจสอบรูปแบบและการปรับตามนั้นในขณะที่รักษาคำพูดไว้ที่จุดเริ่มต้นและจุดสิ้นสุดของนิพจน์ โปรดทราบว่าจะไม่พบไฟล์ที่คุณไม่ได้รับอนุญาตให้อ่าน
#!/bin/bash
#This script is intended to find virtually all video file formats.
find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp*$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"
แก้ไขตามความคิดเห็น:ส่วน$
ท้ายของส่วนขยายบ่งบอกว่าจะต้องพบข้อความค้นหาที่ท้ายบรรทัด หากเราต้องการจับคู่จุดเริ่มต้นของบรรทัดแทนเราจะใช้^
ก่อนคำที่เราตั้งใจจะจับคู่ คุณสามารถค้นหาแองเคอร์เหล่านี้ได้อธิบายรายละเอียดเพิ่มเติมที่นี่
ฉันทำการเปรียบเทียบความเร็วกับการใช้ค้นหาและผลลัพธ์คือ:
time locate *.mkv *.webm *.flv *.vob *.ogg *.ogv *.drc *gifv *.mng *.avi *.mov *.qt *.wmv *.yuv *.rm *.rmvb *.asf *.amv *.mp4$ *.m4v *.mp *.m?v *.svi *.3gp *.flv *.f4v
real 0m8.887s
user 0m5.814s
sys 0m0.052s
เมื่อเทียบกับ
time find /. -type f | grep -E "\.webm$|\.flv$|\.vob$|\.ogg$|\.ogv$|\.drc$|\.gifv$|\.mng$|\.avi$|\.mov$|\.qt$|\.wmv$|\.yuv$|\.rm$|\.rmvb$|/.asf$|\.amv$|\.mp4$|\.m4v$|\.mp4$|\.m?v$|\.svi$|\.3gp$|\.flv$|\.f4v$"
real 0m2.795s
user 0m0.657s
sys 0m1.115s
การค้นหาอย่างไม่คาดคิดนั้นเร็วกว่า ฉันจะใช้วิธีนี้
แก้ไข:การทดสอบเพิ่มเติมบ่งชี้ว่าการค้นหานั้นเร็วกว่าบนเครื่องอื่น ฉันคิดว่าผลการทดสอบความเร็วเริ่มต้นของฉันนั้นแย่เพราะแคช
แหล่งที่มา:
man find
man grep
/programming/7190565/unix-find-multiple-file-types