这个巨大的档案中有很多类型的图形图像,如.jpg,.gif,.png等。我不知道所有类型。有没有办法找到'能够让它列出所有图形图像而不管它们的点扩展名是什么?谢谢!
答案 0 :(得分:48)
这应该可以解决问题
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
答案 1 :(得分:25)
以下更适合我,因为在我的情况下,我想将这个文件列表传输到另一个程序。
find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) print $1}'
如果您想将图片放在焦点上(正如评论中的某些人所说)
find . -type f -exec file {} \; | awk -F: '{if ($2 ~/image/) printf("%s%c", $1, 0)}' | tar -cvf /tmp/file.tar --null -T -
答案 2 :(得分:11)
find . -type f -exec file {} \; | grep -o -P '^.+: \w+ image'
甚至应该更好。
答案 3 :(得分:6)
仅对“图像”进行格式化或使用awk不会这样做。 PSD文件将由带有大写“I”的“Image”标识,因此我们需要将regexp改进为不区分大小写或者还包括大写I.EPS文件根本不包含单词“image”,所以我们还需要根据您的需要匹配“EPS”或“Postscript”。所以这是我的改进版本:
find . -type f -exec file {} \; | awk -F: '{ if ($2 ~/[Ii]mage|EPS/) print $1}'
答案 4 :(得分:1)
与同一问题相关,我刚刚发布了一个名为 photofind (We came to the conclusion)的工具。它的行为类似于普通的find-command,但专门用于图像文件,并且还支持基于存储在图像文件中的EXIF信息过滤结果。有关详细信息,请参阅链接的github-repo。
答案 5 :(得分:0)
与选择的答案相比,以下是更有效的解决方案:
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倍以上)。