#!/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 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
替代方案:搜索文件:
或者如果你只想要文件名......
-N, --no-pad
: 不要填充文件名-i, --mime
:使文件命令输出 mime 类型的字符串,而不是更传统的人类可读的字符串。因此它可能会说'text/plain; charset=us-ascii' 而不是 'ASCII 文本'。为了使此选项起作用,file 更改了它处理命令本身识别的文件的方式(例如许多文本文件类型、目录等),并使用了替代的“魔术”文件。(参见下面的文件部分)。文件部分指向:
file
虽然是慢速wwwwwwwwwwwwwwwwww(它会打开所有找到的文件)但具有您不需要添加所有这些扩展名的优势。使用定位:
我想这可以作为一个 1-liner 来完成,但它看起来有点麻烦,所以我创建了一个易于启动和编辑的脚本并将其命名为
findvids.sh
这对我有用。注意:我可能没有涵盖所有的视频文件类型,但我确信我拥有其中的大部分。一个值得注意的例外是 .mkv,因为它是项目的目标格式,我不需要查找已处理的文件。通过检查模式并进行相应调整,同时在表达式的开头和结尾保留引号,向脚本添加其他格式(扩展)以满足您的需求应该非常简单。请注意,不会找到您无权读取的文件。
根据评论编辑:
$
扩展名末尾的 表示必须在行尾找到搜索词。如果我们想匹配行的开头,我们会^
在我们打算匹配的术语之前使用。您可以在此处找到这些锚点的详细说明。我对使用定位进行了速度比较,结果是:
对比
没想到发现速度更快。我将使用这种方法。
编辑:进一步的测试表明在另一台机器上定位速度更快。我认为我最初的速度测试结果是由于缓存而造成的。
资料来源:
man find
man grep
https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types
在Elder Geek 答案
find
中的命令中,区分大小写让我感到困惑。我的设备在拍摄视频等时似乎经常使用大写字母。只需向 grep 添加选项即可解决此问题:-i
这是一个由 和 组成的可靠且简单
find
的file
答案grep
:请注意,它不适用于包含
: image/
.