linux 用find?列出所有图形图像文件[关闭]

polkgigr  于 2023-06-05  发布在  Linux
关注(0)|答案(6)|浏览(546)

**已关闭。**此问题不符合Stack Overflow guidelines。目前不接受答复。

这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
两年前关闭。
社区在12天前审查了是否重新打开此问题,并将其关闭:
原始关闭原因未解决
Improve this question
在这个庞大的档案中有许多类型的图形图像,如.jpg,.gif,.png等。我不知道所有的类型。有没有一种方法可以让'find'列出所有的图形图像,而不管它们的点扩展名是什么?谢谢!

r1zhe5dt

r1zhe5dt1#

这个应该可以了

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
bkkx9g8r

bkkx9g8r2#

以下更适合我,因为在我的情况下,我想把这个文件列表管道到另一个程序。

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 -

第一个链接使用以下命令:findfileawk。第二行添加tar。最好的办法是查阅本地手册页以了解特定系统的行为。

eufgjt7s

eufgjt7s3#

find . -type f -exec file {} \; | grep -o -P '^.+: \w+ image'

应该会更好

k10s72fa

k10s72fa4#

Grepping或使用awk只为“图像”不会这样做。PSD文件将通过带有大写字母“I”的“Image”来标识,因此我们需要改进regexp,使其不区分大小写或包含大写字母I。EPS文件将不包含单词“图像”在所有,所以我们还需要匹配“EPS”或“后记”,这取决于你想要什么。以下是我的改进版本:

find . -type f -exec file {} \; | awk -F: '{ if ($2 ~/[Ii]mage|EPS/) print $1}'
yftpprvb

yftpprvb5#

更新(2022-03-03)

这是一个改进的版本,有以下变化:
1.删除xargs

  1. Support filenames which contains : based on 林果皞's comment.
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

1.使用-type f而不是-name '*',因为前者只搜索文件,而后者搜索文件和目录。

  1. xargs使用尽可能多的参数执行file,这与find -exec file {} \;相比是超级快的,find -exec file {} \;对每个找到的参数执行file
  2. grep -F更快,因为我们只想匹配固定的字符串。
  3. cutawk快(我记得快了5倍多)。
nzk0hqpo

nzk0hqpo6#

关于同样的问题,我刚刚发布了一个名为photofindhttps://github.com/trimap/photofind)的工具。它的行为类似于普通的find-command,但它专门用于图像文件,并支持基于存储在图像文件中的EXIF信息过滤结果。查看链接github-repo了解更多细节。

相关问题