这是一个独特的情况
我的一个分区中有 500 多部电影。我想要做的是根据属性搜索电影文件视频尺寸,这样我就可以删除低于 720p HD 的任何内容,为其他内容腾出空间。
nautilus 中的搜索选项可以按日期或文件类型搜索,但不能按属性搜索。还有其他我可以使用的应用程序吗?或命令?或Nautilus 脚本?
更新
find . -name '*.mkv' -exec exiftool -fileName -imageSize {} \;
此命令按预期工作,但我希望此命令能做更多的事情。我不知道该怎么做Exif工具有效,所以我无法修改它
我可以在单个命令中添加多个文件扩展名吗?
大多数文件都是,mkv
但它包括mp4
flv
。一个命令扫描所有这些视频扩展可以节省很多工作
(查看有多少个子文件夹)
答案1
启用扩展和递归通配符:
shopt -s extglob globstar
然后:
exiftool -q -p '$FileName $ImageSize' **/+(*.mp4|*.mkv|*.flv)
**
将递归到子目录中。扩展的 glob+(*.mp4|...)
将匹配 中的至少一个模式()
。
您可以使用 grep 处理输出并生成文件列表1920x1080
:
exiftool -q -p '$Directory/$FileName $ImageSize' **/+(*.mp4|*.mkv|*.flv) |
grep -v ' 1920x1080$'
注意这里的变化:我正在使用$Directory/$FileName $Imagesize
。我们需要文件的路径,而不仅仅是文件名,所以$Directory/$Filename
。在这里我们检查每一行是否不以1920x1080
($
是行尾,-v
在 grep 中反转匹配)结尾。验证输出。
现在我们可以删除这些文件:
exiftool -q -p '$Directory/$FileName $ImageSize' **/+(*.mp4|*.mkv|*.flv) |
grep -v ' 1920x1080$' | sed 's: [^ ]*$::' |
xargs -d '\n' rm
sed 's: [^ ]*$::'
删除从最后一行到行末的所有内容,因此
AxB
输出的解析exiftool
被删除,只保留文件名。然后xargs rm
将每行作为文件名并rm
以它们作为参数运行。
完成后禁用通配符选项:
shopt -u globstar globstar
要排除多个分辨率,请在中使用 OR grep
:
grep -Ev ' (1920x1080|1920x820|1280x544)$'
以下是包含所有广泛使用的视频格式的命令
exiftool -q -p '$Directory/$FileName $ImageSize' **/+(*.mp4|*.mkv|*.flv|*.avi|*.webm|*.vob|*.mov|*.wmv|*.amv|*.m4p|*.m4v|*.mpeg|*.mpv|*.m4v|*.3gp)
这是一个排除(几乎)所有高清视频格式的命令
grep -Ev ' (1920x1080|1920x1040|1920x1068|1906x952|1916x808|1920x808|1920x804|1916x812|1600x864|1436x1080|1920x820|1280x544|1920x800|1920x802|1920x816|1856x1080|1920x1072|1920x1056|1280x720|1280x536|1280x560|1280x538|1280x528|1216x544|1280x534|1280x532|1281x534|1278x714|1280x718|1280x688|1278x682|1280x690|1280x694|1280x660|1282x692|1280x692|1285x696|1278x544|1280x696|1279x718|1280x546|1281x546|960x720|1324x552|1305x552|1308x552|1536x640)$'