在 unix 上不区分大小写地查找文件

Find file case insensitively on unix

我正在开发 aix 并期望收到一个名为例如"afilename0729"。但是,该文件是从 Windows 机器上传的。我无法控制它有时带有名称 "AFILENAME0729"。本来我写的很幼稚

ls afilename*

在脚本中找到它。但是不要写像

这样的东西
find . -name "[aA][fF][iI][lL][eE][nN][aA][mM][eE][01][0-9][0-3][0-9]"

有没有更好的方法来做到这一点?

使用“-iname”忽略大小写。

例如

find . -iname afilename*

我还找到了这个 unix.stackexchange 相同问题的答案

如果您使用的是 GNU find,则可以使用不区分大小写的 -iname 而不是 -name

来自manpage

-iname pattern:

Like -name, but the match is case insensitive. For example, the patterns fo* and F?? match the file names Foo, FOO, foo, fOo, etc. The pattern *foo* will also match a file called .foobar.

您可以使用 -iname 或用于正则表达式支持,使用 -iregex 忽略大小写匹配 find:

find . -iregex '.*afilename[01][0-9][0-3][0-9]'

您使用 ls 开始(仅查看当前目录)。 不检查数字的简单形式是

ls | grep -i "afilename*"

您还可以使用正则表达式

ls | egrep -i "^afilename[01][0-9][0-3][0-9]"

当您使用正则表达式时,* 不是普通的通配符: 查找以 "a" 开头并以 [0-9] 结尾的文件,不要使用

ls | egrep -i "^a*[0-9]$"

但使用

ls | egrep -i "^a.*[0-9]$"