几个月前我下载了一个视频。我不太记得保存它的名称。是否有任何命令或任何方法只输出视频文件,以便我可以在那里搜索我的视频?从手册页,我找不到找到做这项工作的任何选项。
我下载的视频文件可能有任何扩展名(如 webm 等),而且可能我当时将名称更改为诸如“abcde”之类的名称,我现在不记得了。所以搜索不能基于文件名!
(仅提一个相似之处:在 perl 中有检查文件是文本文件还是二进制文件等的命令。类似地,可能有一种方法可以检查其视频文件还是多媒体文件)
Gil*_*il' 15
基本思想是使用文件实用程序来确定每个文件的类型,并对视频文件进行过滤。
find /some/directory -type f -exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'
Run Code Online (Sandbox Code Playgroud)
这将/some/directory
递归打印其MIME类型为视频类型的所有文件及其子目录的名称。
该file
命令需要打开每个文件,这可能很慢。为了加快速度:
/tmp
,/var/tmp
以及您的主目录。这是一个示例,该示例将修改时间限制为至少 60 天前,并将 ctime 限制为不超过 100 天前。
find /tmp /var/tmp ~ -type f -size +10M \
-mtime +60 -ctime -100 \
-exec file -N -i -- {} + |
sed -n 's!: video/[^:]*$!!p'
Run Code Online (Sandbox Code Playgroud)
slm*_*slm 12
正如克里斯在他的回答中提到的那样,您可以使用它find
来执行此操作,但我发现搜索locate
数据库的速度要快得多。
假设你的发行版提供了这个功能,大多数大发行版都提供了,Ubuntu、Fedora、CentOS 等。
$ locate --basename .mp4 .mkv .wmv .flv .webm .mov .avi | head -5
/home/saml/Desktop/sample_mpeg4.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 1.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 10.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 2.mp4
/home/saml/Downloads/Karrolls_Christmas/Karroll's Christmas (2004) part 3.mp4
Run Code Online (Sandbox Code Playgroud)
要按类型查找文件,您可以使用该命令file
获取有关特定文件类型的信息列表。
这是我的系统 Fedora 19 中这些文件类型的粗略列表。
您可以使用此命令查找/home/<user>
目录中的所有文件。
$ find /home/<user> -type f -exec file {} + | \
grep -E "MPEG v4|EBML|\
Microsoft ASF|Macromedia Flash Video|WebM|Apple QuickTime movie|AVI"
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用file
归类为“视频”的 mime 类型进行搜索。
-i, --mime
Causes the file command to output mime type strings rather than
the more traditional human readable ones. Thus it may say
‘text/plain; charset=us-ascii’ rather than “ASCII text”.
Run Code Online (Sandbox Code Playgroud)
将我们上面所做的调整为这样的:
$ find /home/<user> -type f -exec file -i {} + | grep video
Run Code Online (Sandbox Code Playgroud)
您可以使用sed
仅获取文件名:
$ find /home/<user> -type f -exec file -i {} + |
sed -n '/video/s/:[^:]\+$//p'
Run Code Online (Sandbox Code Playgroud)
由于您现在指定它不能基于扩展名,您还可以仔细阅读file
(警告:这可能需要很长时间):
find ~ -type f -exec file -i {} + | grep video
Run Code Online (Sandbox Code Playgroud)
如果您可以通过文件名进行搜索,假设它有一个通用的视频扩展名并且它在您的主目录中:
find ~ -type f -name '*.mkv' -o -name '*.mp4' -o -name '*.wmv' -o -name '*.flv' -o -name '*.webm' -o -name '*.mov'
Run Code Online (Sandbox Code Playgroud)
您还可以使用正则表达式:
find ~ -type f -regex '.*\.\(mkv\|mp4\|wmv\|flv\|webm\|mov\)'
Run Code Online (Sandbox Code Playgroud)
如果您对下载它的时间有一个好主意(并假设 mtime 设置为那个时间),您还可以尝试使用 GNU find 的-mtime
选项缩小范围。