我尝试使用Unity Lens文件搜索*.*
并按Last Modified = All,Type = Videos和Size = All 进行过滤,但什么也没找到,尽管我知道我的Pictures文件夹中有一些.3gp文件。我知道在文件系统上安装的另一个驱动器上也有许多视频文件。我编译了一个可能的扩展列表,并尝试find
使用find./ -name“ * .ext” -o(等,等等,广告恶作剧),利用这些命令进行了无数次迭代,没有任何运气。解决办法是什么?
我尝试使用Unity Lens文件搜索*.*
并按Last Modified = All,Type = Videos和Size = All 进行过滤,但什么也没找到,尽管我知道我的Pictures文件夹中有一些.3gp文件。我知道在文件系统上安装的另一个驱动器上也有许多视频文件。我编译了一个可能的扩展列表,并尝试find
使用find./ -name“ * .ext” -o(等,等等,广告恶作剧),利用这些命令进行了无数次迭代,没有任何运气。解决办法是什么?
Answers:
备选:在文件中搜索:
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
:导致file命令输出mime类型的字符串,而不是更传统的人类可读字符串。因此它可以说“文本/纯文本;charset = us-ascii”而不是“ ASCII文本”。为了使此选项起作用,文件会更改其处理命令本身识别的文件(例如许多文本文件类型,目录等)的方式,并使用替代的“魔术”文件。(请参阅下面的“文件”部分)。
FILES部分指向:
档案
/usr/share/misc/magic.mgc
默认编译的魔术列表。
/usr/share/misc/magic
包含默认魔术文件的目录。
file
虽然速度较慢(它将打开找到的所有文件),但是具有不需要添加所有扩展名的优点。
使用定位:
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
我想这可以作为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$"
根据注释编辑:将$
在扩展标志着结束了检索词都必须在行的末尾。如果我们想匹配行的开头,我们会^
在要匹配的术语之前使用。您可以在此处找到这些锚点的详细说明。
我对使用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
出乎意料的发现是更快。我将使用这种方法。
编辑:进一步测试表明在另一台计算机上定位更快。我认为我最初的速度测试结果由于缓存而无法使用。
资料来源:
man find
man grep
touch hello.mp4
不会创建>:-D视频文件,您可能需要对其进行更改locate
以加快速度。
touch
但是,由于尚未在该系统上完成此操作,因此在这种情况下它实际上并不重要。就locate而言,我必须先运行updatedb
才能拥有当前数据,我不会吗?