ฉันจะหาไฟล์วิดีโอทั้งหมดในระบบของฉันได้อย่างไร?


11

ฉันลองใช้การค้นหา*.*และกรองไฟล์ Unity Lens โดย Last Modified = All, Type = Videos, และ Size = All แต่ไม่พบอะไรเลยแม้ว่าฉันรู้ว่ามีไฟล์. 3gp อยู่ในโฟลเดอร์ Pictures ของฉัน ฉันรู้ว่าฉันมีไฟล์วิดีโอจำนวนมากในไดรฟ์อื่นที่ติดตั้งบนระบบไฟล์เช่นกัน ฉันรวบรวมรายชื่อของส่วนขยายที่น่าจะเป็นและฉันได้ลองทำซ้ำfindคำสั่งจำนวนมากโดยใช้คำสั่ง find ./ -name "* .ext" -o (ฯลฯ ฯลฯ โฆษณา nauseum) โดยไม่มีโชค ทางออกคืออะไร?


ฉันไม่ได้ลอง แต่มีบทความเกี่ยวกับ OMG! Ubuntu เกี่ยวกับแอป FSearch คุณอาจต้องการตรวจสอบ omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Jo-Erlend Schinstad

@ Jo-ErlendSchinstad ขอบคุณสำหรับคำแนะนำ แต่เนื่องจากฉันได้รับผลลัพธ์ผ่าน CLI ภายในไม่ถึง 3 วินาทีฉันพอใจกับวิธีการนี้ ฉันจะดูมัน :-)
Elder Geek

แต่ถ้าคุณไม่เข้าใจคำสั่งคุณก็จะลืมมัน และถ้าคุณเข้าใจคำสั่งคุณจะไม่ถามคำถาม มาปรับปรุง Ubuntu กันเถอะโดยทำให้ทุกอย่างง่ายขึ้นสำหรับผู้ที่ต้องการทำงานให้เสร็จ คุณสามารถทำได้โดยเพิ่มแอพหรือชี้คนไปที่แอพที่มีอยู่แล้ว
Jo-Erlend Schinstad

@ Jo-ErlendSchinstad ฉันมักจะเริ่มขาดความเข้าใจที่ฉันได้รับผ่านการวิจัยและการวิเคราะห์ ฉันเชื่อว่าวิธีการนี้มีความสำคัญต่อการพัฒนา กระบวนการค้นพบนำฉันไปสู่โซลูชันที่ฉันเลือกที่จะแบ่งปันที่นี่ในขณะที่ฉันสร้างสคริปต์และวางไว้ใน ~ / bin ฉันไม่น่าจะลืมและรู้ว่าต้องดูว่าฉันจะทำอย่างไร เนื่องจากเป็นคำตอบของฉันเช่นกันทุกคนที่มีแรงจูงใจสามารถแยกวิเคราะห์และเข้าใจได้เช่นกัน
Elder Geek

คุณถูก. เราไม่ต้องการเดสก์ท็อป เราสามารถทำเกือบทุกอย่างโดยใช้บรรทัดคำสั่ง แต่ถ้าเราต้องการเติบโตเราต้องตระหนักว่าคนส่วนใหญ่ไม่ต้องการเรียนรู้สิ่งนั้น ฉันรู้ว่านักพัฒนาซอฟต์แวร์ที่ไม่สามารถอธิบายความแตกต่างระหว่างสแต็กกับกอง
Jo-Erlend Schinstad

คำตอบ:


14

ทางเลือก: ค้นหาในไฟล์ :

sudo find . -type f -exec file -N -i -- {} + | grep video

หรือถ้าคุณต้องการชื่อไฟล์เท่านั้น ...

sudo find . -type f -exec file -N -i -- {} + | sed -n 's!: video/[^:]*$!!p'

-N, --no-pad: อย่าใส่ชื่อไฟล์

-i, --mime: ทำให้คำสั่ง file ส่งเอาต์พุตสตริง mime แทนที่จะเป็นแบบดั้งเดิมที่มนุษย์สามารถอ่านได้มากขึ้น ดังนั้นจึงอาจพูดข้อความ '/ ธรรมดา; charset = us-ascii 'แทนที่จะเป็น' ข้อความ ASCII ' เพื่อให้ตัวเลือกนี้ทำงานไฟล์จะเปลี่ยนวิธีจัดการไฟล์ที่คำสั่งรู้จัก (เช่นไฟล์ข้อความหลายประเภทไดเรกทอรี ฯลฯ ) และใช้ประโยชน์จากไฟล์ 'เวท' ทางเลือกอื่น (ดูส่วนไฟล์ด้านล่าง)


ส่วนไฟล์จะชี้ไปที่:

ไฟล์

/usr/share/misc/magic.mgc รายการเวทมนต์เริ่มต้น

/usr/share/misc/magic ไดเรกทอรีที่มีไฟล์มายากลเริ่มต้น


file คือ slowwwwwwwwwwwwwwwwwww แม้ว่า (จะเปิดไฟล์ทั้งหมดที่ค้นหาพบ) แต่มีข้อได้เปรียบที่คุณไม่จำเป็นต้องเพิ่มขอบเขตเหล่านั้นทั้งหมด


ใช้ค้นหา:

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

ซึ่ง "ส่วนไฟล์ใต้"
พี่ Geek

เพิ่ม! มันถูกซ่อนอยู่ในหน้าคน: D
Rinzwind

มันแปลกมากฉันคาดว่าการค้นหาจะเร็วขึ้น แต่ด้วยคำสั่งค้นหาของคุณฉันได้รับเวลา: 0m8.985s จริงและด้วยคำสั่งค้นหาของฉันฉันได้เวลา: ของจริง 0m2.595s
Elder Geek

1
โอ้ ... ค้นหาทำทุกไฟล์ การค้นหาของคุณมาจากที่ที่คุณไม่ได้?
Rinzwind

ฉันเพิ่มสวิตช์ -e ซึ่งไม่ได้มีผลกระทบมาก แต่การส่งคืนผลลัพธ์สำหรับไฟล์ที่หายไปแล้วดูเหมือนจะไม่เป็นประโยชน์ เวลา sys ที่ได้รับนั้นต่ำกว่ามากสำหรับการค้นหา แต่เวลาจริงกับผลลัพธ์คือทั้งหมดที่ฉันสนใจ
Elder Geek

5

ฉันคิดว่าสิ่งนี้สามารถทำได้ในรูปแบบ 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


touch hello.mp4ไม่สร้างไฟล์วิดีโอ>: - D และคุณอาจต้องการเปลี่ยนเป็นlocateเพื่อเพิ่มความเร็ว
Rinzwind

@Rinzwind จุดที่ถูกต้องเกี่ยวกับtouchอย่างไรก็ตามตั้งแต่ที่ยังไม่ได้ทำในระบบนี้มันไม่เกี่ยวข้องในกรณีนี้ เท่าที่ค้นหามีความกังวลฉันจะต้องเรียกใช้updatedbก่อนเพื่อที่จะมีข้อมูลปัจจุบันฉันจะไม่?
Elder Geek

ใช่มีการอัพเดต b ทุกวันดังนั้นหากคุณสามารถสันนิษฐานได้ว่าคุณไม่จำเป็นต้องใช้เวลาสองถึงสามชั่วโมง (ความเร็วที่ได้จะส่งคืนผลลัพธ์นั้นมีขนาดใหญ่กว่าการค้นหา: D)
Rinzwind

@ Rinzwind ฉันชอบที่จะเห็นตัวอย่างการทำงานของสิ่งนี้โดยใช้ค้นหา
Elder Geek

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