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

Ash*_*air 13 bash find filenames

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

目前我正在使用

find . -type f -iname *.TIF -print ; find . -type f -iname *.TIFF -print;
Run Code Online (Sandbox Code Playgroud)

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

为什么不*.tif*呢?

在某些情况下,我的目录可能有带有.tif.aux.xmltiff扩展名的辅助文件。我想忽略这些。

Ste*_*itt 35

find支持“或”析取,-o

find . -type f \( -iname \*.tif -o -iname \*.tiff \)
Run Code Online (Sandbox Code Playgroud)

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

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


Ora*_*Dog 34

比 using 更短-o,请改用正则表达式

find . -type f -iregex '.*\.tiff?'
Run Code Online (Sandbox Code Playgroud)

大括号扩展不是glob 匹配的一部分,因此不能与-(i)name.

  • 谨慎对待这些事情总是更好。该模式匹配 `.tif` 后跟一个或零个 `f` 字符。`?` 使前一个字符可选。不是想在这里炫耀,只是想表明努力是多么小。不。:-) (7认同)
  • 请解释正则表达式。 (2认同)
  • @ScottieH 它匹配以`.tif` 结尾的名字和一个可选的最终`f` (2认同)
  • 这比 `-o` 版本​​慢,在我的测试中慢了不到 50%,尽管在大多数情况下这可能并不重要;-) — 如果目录不是,肯定不会与许多系统上的 I/O 时间相比t 已经缓存。 (2认同)