列出扩展名为 .tif、.tiff、.TIF、.TIFF 的所有文件

列出扩展名为 .tif、.tiff、.TIF、.TIFF 的所有文件

给定一个嵌套目录,我想列出扩展名为.tif, .TIF, .tiff,的所有 tif 文件.TIFF

目前我正在使用

find . -type f -iname *.TIF -print ; find . -type f -iname *.TIFF -print;

使用-iname允许我不区分大小写,但它会遍历目录两次以获取带有.tif和 的文件.tiff。有一个更好的方法吗?也许用大括号扩展?

为什么不*.tif*

在某些情况下,我的目录可能会.tif.aux.xml在 tiff 旁边包含带有扩展名的辅助文件。我想忽略那些。

答案1

find支持“或”析取,-o

find . -type f \( -iname \*.tif -o -iname \*.tiff \)

这将列出名称匹配*.tif或的所有文件*.tiff,忽略大小写。

-print是默认操作,因此无需在此处指定。*(、 和)被转义,因此它们失去了对 shell 的意义。

答案2

比 using 短-o,使用正则表达式代替

find . -type f -iregex '.*\.tiff?'

大括号扩展不是全局匹配,因此不能与 一起使用-(i)name

答案3

这是一个简单的技巧,可以获取所需的输出,假设您位于要运行 find 命令的树的顶级目录中。免责声明:它不适合高级用法或查找场景:

find -type f |egrep '.tif$|.tiff$|.TIF$|.TIFF$'

解释:

  1. 默认情况下,gnu find 递归到当前目录并将输出打印到 stdout(不需要点或 -print 选项)。
  2. egrep 允许扩展正则表达式。末尾的 $ 表示文件名必须以 tif 结尾。因此,foo.tif.bar 将不会被视为匹配项。
  3. 这些管道是一个 OR 来匹配任何模式。

相关内容