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


11

我尝试使用Unity Lens文件搜索*.*并按Last Modified = All,Type = Videos和Size = All 进行过滤,但什么也没找到,尽管我知道我的Pictures文件夹中有一些.3gp文件。我知道在文件系统上安装的另一个驱动器上也有许多视频文件。我编译了一个可能的扩展列表,并尝试find使用find./ -name“ * .ext” -o(等,等等,广告恶作剧),利用这些命令进行了无数次迭代,没有任何运气。解决办法是什么?


我没有尝试过,但是有一篇关于OMG的文章!关于FSearch应用程序的Ubuntu。您可能需要检查一下。omgubuntu.co.uk/2016/10/fsearch-fast-file-search-tool-linux
Jo-Erlend Schinstad

@ Jo-ErlendSchinstad谢谢您的建议,但是由于我在3秒钟内通过CLI获得结果,因此我对这种方法感到满意。我会看的。:-)
极客长老

但是除非您理解该命令,否则您将忘记它。而且,如果您确实了解这些命令,那么您就不会问这个问题。让我们为那些只想完成工作的人提供便利,让我们改进Ubuntu。您可以通过添加应用程序或将人们指向已经存在的应用程序来实现。
Jo-Erlend Schinstad '16

@ Jo-ErlendSchinstad我经常开始缺乏通过研究和分析获得的理解。我相信这种方法对发展至关重要。发现过程使我找到了一个解决方案,当我创建脚本并将其放置在〜/ bin中时,我选择在此处共享该解决方案,我不太可能忘记并知道在哪里查找。由于这也是我的答案,因此任何有动机的人都可以解析和理解它。
年长者怪胎

你是对的。我们实际上不需要台式机。我们几乎可以使用命令行执行所有操作。但是,如果我们想成长,就必须意识到大多数人都不想学习这种东西。我知道开发人员甚至无法描述堆栈和堆之间的差异。
Jo-Erlend Schinstad '16

Answers:


14

备选:在文件中搜索:

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

其中“下面的文件部分”
极客长老版,2016年

添加!它被隐藏在手册页中:D
Rinzwind '16

奇怪,我希望定位会更快,但是使用您的locate命令,我得到时间:real 0m8.985s,而使用find命令我得到时间:real 0m2.595s
Elder Geek

1
哦...找到所有文件。您的发现来自您所在的地方吗?
Rinzwind '16

我确实添加了-e开关,它没有太大的影响,但是返回已经消失的文件的结果似乎没有帮助。授予系统时间的定位时间要短得多,但是真正实现结果的实时性是我真正关心的。
年长者极客

5

我想这可以作为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

/programming/7190565/unix-find-multiple-file-types


touch hello.mp4不会创建>:-D视频文件,您可能需要对其进行更改locate以加快速度。
Rinzwind '16

@Rinzwind关于的有效点touch但是,由于尚未在该系统上完成此操作,因此在这种情况下它实际上并不重要。就locate而言,我必须先运行updatedb才能拥有当前数据,我不会吗?
年长者怪胎

是的,updatedb是每天完成的,因此,如果您可以假设不需要持续几个小时(返回结果的速度比find:D更高)
Rinzwind

@Rinzwind我很乐意使用locate查看此示例。
年长者怪胎

添加了一个位置。
Rinzwind '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.