![如何找到我的系统上的所有视频文件?](https://linux22.com/image/888264/%E5%A6%82%E4%BD%95%E6%89%BE%E5%88%B0%E6%88%91%E7%9A%84%E7%B3%BB%E7%BB%9F%E4%B8%8A%E7%9A%84%E6%89%80%E6%9C%89%E8%A7%86%E9%A2%91%E6%96%87%E4%BB%B6%EF%BC%9F.png)
我尝试使用 Unity Lens File 搜索*.*
并进行过滤上次修改=全部,类型=视频, 和尺寸=全部,但什么也没找到,尽管我知道我的文件夹中有一些.3gp
文件Pictures
。我知道在文件系统上安装的另一个驱动器上也有许多视频文件。
我整理了一个可能的扩展列表我尝试了该find
命令的多次迭代,并利用了这些命令:
find ./ -name "*.ext" -o (etc, etc, ad nauseum)
根本就没有运气。
解决办法是什么?
答案1
替代方案:搜索文件:
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
:使文件命令输出 mime 类型字符串,而不是更传统的人类可读字符串。因此,它可能会显示“text/plain; charset=us-ascii”而不是“ASCII 文本”。为了使此选项起作用,文件会更改其处理命令本身识别的文件的方式(例如许多文本文件类型、目录等),并使用替代的“魔术”文件。(请参阅下面的文件部分)。
FILES部分指向:
文件
/usr/share/misc/magic.mgc
魔法的默认编译列表。
/usr/share/misc/magic
包含默认魔术文件的目录。
file
虽然很慢(它会打开 find 找到的所有文件),但优点是你不需要添加所有这些扩展。
使用定位:
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
答案2
我认为这可以用一行代码来完成,但是看起来有点麻烦,所以我创建了一个脚本以便于启动和编辑,并将其命名为“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$"
根据评论进行编辑:扩展名末尾$
的 表示搜索词必须位于行尾。如果我们想匹配行首,我们会^
在想要匹配的词之前使用。您可以找到这些锚点的更详细解释这里。
我对使用locate进行了速度比较,结果是:
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
出乎意料的是 find 更快。我会使用这种方法。
编辑:进一步的测试表明,在其他机器上,locate 的速度更快。我认为我最初的速度测试结果由于缓存而不正确。
资料来源:
man find
man grep
https://stackoverflow.com/questions/7190565/unix-find-multiple-file-types
答案3
在find
命令中Elder Geek 的回答,区分大小写让我很困惑。我的设备在拍摄视频等时似乎经常使用大写字母。只需-i
向 grep 添加选项即可解决此问题:
find /. -type f | grep -iE "\.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$"
答案4
以下是由和组成的可靠而简单的答案find
:file
grep
find . -type f |
file --mime-type --no-pad --files-from - |
grep --fixed-strings ': video/'
请注意,它不适用于包含的路径名: image/
。