给定一个嵌套目录,我想列出扩展名为.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
答案3
这是一个简单的技巧,可以获取所需的输出,假设您位于要运行 find 命令的树的顶级目录中。免责声明:它不适合高级用法或查找场景:
find -type f |egrep '.tif$|.tiff$|.TIF$|.TIFF$'
解释:
- 默认情况下,gnu find 递归到当前目录并将输出打印到 stdout(不需要点或 -print 选项)。
- egrep 允许扩展正则表达式。末尾的 $ 表示文件名必须以 tif 结尾。因此,foo.tif.bar 将不会被视为匹配项。
- 这些管道是一个 OR 来匹配任何模式。