Tôi tưởng tượng điều này có thể được thực hiện dưới dạng 1-liner nhưng có vẻ hơi cồng kềnh nên tôi đã tạo một kịch bản để dễ dàng khởi chạy và chỉnh sửa và gọi nó findvids.sh
Đây là những gì hiệu quả với tôi.
Lưu ý: Tôi có thể không bao gồm TẤT CẢ các loại tệp video, nhưng tôi chắc chắn rằng tôi có hầu hết các loại. Một ngoại lệ đáng chú ý là .mkv vì đó là định dạng mục tiêu cho dự án và tôi không cần tìm các tệp đã được xử lý. Sẽ rất đơn giản để thêm các định dạng bổ sung (phần mở rộng) vào tập lệnh cho phù hợp với nhu cầu của bạn bằng cách kiểm tra mẫu và điều chỉnh cho phù hợp trong khi duy trì dấu ngoặc kép ở đầu và cuối biểu thức. Lưu ý rằng các tệp bạn không có quyền đọc sẽ không được tìm thấy.
#!/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$"
Chỉnh sửa dựa trên nhận xét: Ở $
cuối phần mở rộng biểu thị rằng thuật ngữ tìm kiếm phải được tìm thấy ở cuối dòng. nếu chúng tôi muốn khớp với đầu dòng thay vì chúng tôi sẽ sử dụng ^
trước thuật ngữ chúng tôi dự định khớp. Bạn có thể tìm thấy các neo được giải thích chi tiết hơn ở đây.
Tôi đã làm một so sánh tốc độ với việc sử dụng định vị và kết quả là:
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
so với
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
Bất ngờ tìm thấy là nhanh hơn. Tôi sẽ sử dụng phương pháp này.
Chỉnh sửa: thử nghiệm thêm cho thấy rằng xác định vị trí nhanh hơn trên một máy khác. Tôi nghĩ rằng kết quả kiểm tra tốc độ ban đầu của tôi là bunk do bộ nhớ đệm.
Nguồn:
man find
man grep
/programming/7190565/unix-find-multipl-file-types