Eld*_*eek 12 video bash files file-format find
我尝试使用 Unity Lens File 搜索*.*
并按 Last Modified=All、Type=Videos 和 Size=All进行过滤,但没有找到任何东西,尽管我知道我的图片文件夹中有一些 .3gp 文件。我知道我在文件系统上安装的另一个驱动器上也有许多视频文件。我编译了一个可能的扩展列表,我尝试了多次find
命令迭代,使用这些命令 find ./ -name "*.ext" -o (etc, etc, ad nauseum) 没有任何运气。解决办法是什么?
Rin*_*ind 16
替代方法:搜索文件:
sudo find . -type f -exec file -N -i -- {} + | grep video
Run Code Online (Sandbox Code Playgroud)
或者如果你只想要文件名......
sudo find . -type f -exec file -N -i -- {} + | sed -n 's!: video/[^:]*$!!p'
Run Code Online (Sandbox Code Playgroud)
-N, --no-pad
: 不要填充文件名
-i, --mime
: 使 file 命令输出 mime 类型的字符串,而不是更传统的人类可读的字符串。因此它可能会说“文本/纯文本;charset=us-ascii' 而不是 'ASCII text'。为了使这个选项起作用,文件改变了它处理命令本身识别的文件的方式(例如许多文本文件类型、目录等),并使用替代的“魔法”文件。(请参阅下面的文件部分)。
FILES 部分指向:
文件
/usr/share/misc/magic.mgc
默认编译的魔法列表。
/usr/share/misc/magic
包含默认魔法文件的目录。
file
虽然很慢wwwwwwwwwwwwwwww(它会打开找到的所有文件),但具有您不需要添加所有这些扩展名的优势。
使用定位:
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
Run Code Online (Sandbox Code Playgroud)
我想这可以作为 1-liner 来完成,但它看起来有点麻烦,所以我创建了一个脚本以方便启动和编辑,并称之为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$"
Run Code Online (Sandbox Code Playgroud)
根据注释编辑:将$
在扩展标志着结束了检索词都必须在行的末尾。如果我们想匹配行的开头,我们会^
在我们打算匹配的术语之前使用。您可以在此处更详细地了解这些锚点。
我对使用 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
Run Code Online (Sandbox Code Playgroud)
对比
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
Run Code Online (Sandbox Code Playgroud)
没想到发现速度更快。我将使用这种方法。
编辑:进一步测试表明定位在另一台机器上更快。我认为由于缓存,我最初的速度测试结果很糟糕。
资料来源:
man find
man grep