在这个庞大的存档中有很多类型的图形图像,例如.jpg、.gif、.png 等。我不知道所有类型。有没有办法让“查找”能够列出所有图形图像,而不管它们的点扩展名是什么?谢谢!
问问题
69468 次
6 回答
71
这应该可以解决问题
find . -name '*' -exec file {} \; | grep -o -P '^.+: \w+ image'
示例输出:
./navigation/doc/Sphärische_Trigonometrie-Dateien/bfc9bd9372f650fd158992cf5948debe.png: PNG image
./navigation/doc/Sphärische_Trigonometrie-Dateien/6564ce3c5b95ded313b84fa918b32776.png: PNG image
./navigation/doc/subr_1.jpe: JPEG image
./navigation/doc/Astroanalytisch-Dateien/Gamma.gif: GIF image
./navigation/doc/Astroanalytisch-Dateien/deltaS.jpg: JPEG image
./navigation/doc/Astroanalytisch-Dateien/GammaBau.jpg: JPEG image
于 2013-05-26T10:42:13.580 回答
36
以下更适合我,因为在我的情况下,我想将此文件列表通过管道传输到另一个程序。
find . -type f -exec file --mime-type {} \+ | awk -F: '{if ($2 ~/image\//) print $1}'
如果您想将图像压缩(如评论中的某人)问
find . -type f -exec file --mime-type {} \+ | awk -F: '{if ($2 ~/image\//) printf("%s%c", $1, 0)}' | tar -cvf /tmp/file.tar --null -T -
于 2014-07-22T05:13:05.553 回答
12
find . -type f -exec file {} \; | grep -o -P '^.+: \w+ image'
甚至应该更好。
于 2013-09-25T15:56:19.353 回答
8
仅将 awk 用于“图像”将不会这样做。PSD 文件将由带有大写“I”的“Image”标识,因此我们需要改进正则表达式,使其不区分大小写或还包含大写 I。EPS 文件根本不包含“image”一词,所以我们根据您的需要,还需要匹配“EPS”或“Postscript”。所以这是我的改进版本:
find . -type f -exec file {} \; | awk -F: '{ if ($2 ~/[Ii]mage|EPS/) print $1}'
于 2015-02-18T09:13:47.853 回答
3
更新 (2022-03-03)
这是一个经过改进的版本,具有以下更改:
- 删除
xargs
. - 支持包含
:
基于林果皞评论的文件名。
find . -type f |
file --mime-type -f - |
grep -F image/ |
rev | cut -d : -f 2- | rev
与所选答案相比,以下是一个性能更高的解决方案:
find . -type f -print0 |
xargs -0 file --mime-type |
grep -F 'image/' |
cut -d ':' -f 1
- 使用
-type f
代替,-name '*'
因为前者将只搜索文件,而后者搜索文件和目录。 xargs
file
使用尽可能多的参数执行,这与为每个找到find -exec file {} \;
的执行相比非常快。file
grep -F
更快,因为我们只想匹配固定字符串。cut
比awk
(我记得快 5 倍多)。
于 2020-03-06T08:14:34.817 回答
1
与同样的问题相关,我刚刚发布了一个名为photofind的工具(https://github.com/trimap/photofind)。它的行为类似于普通的查找命令,但专门用于图像文件,并且还支持基于图像文件中存储的 EXIF 信息的结果过滤。有关更多详细信息,请参阅链接的 github-repo。
于 2017-09-11T05:55:36.993 回答