如何找到我的系统上的所有视频文件?

如何找到我的系统上的所有视频文件?

我尝试使用 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

以下是由和组成的可靠而简单的答案findfilegrep

find . -type f |
  file --mime-type --no-pad --files-from - |
  grep --fixed-strings ': video/'

请注意,它不适用于包含的路径名: image/

相关内容