查找命令:如何忽略大小写?


170

我正在巨大的目录层次结构中寻找文件“ WSFY321.c”。
通常我会使用GNU findfind . -name "WSFY321.c"
但是我不知道大小写,它可以是大写,小写或二者兼而有之。

查找此文件的最简单方法是什么?
有比这更好的东西find . | grep -i "WSFY321.c"吗?

Answers:


214

GNU的最新版本find具有一个-iname标志,用于不区分大小写的名称搜索。

find . -iname "WSFY321.c"

6
此外,因为你专门找了一个文件,你可以大概刮胡子另一对夫妇蜱的关闭,与-type f标志,这样就不会费心寻找的名称,如果索引节点是一个目录。但这就是优化的
学步

对于某些正则表达式,您可以执行find . -iname \*WSFY321.c\* -type f
Benj

40

使用GNU find或具有它的其他版本的find:

find . -iname 'WSFY321.c'

使用其他版本:

find . -name '[Ww][Ss][Ff][Yy]321.[Cc]'

或较慢但更容易输入的折衷方案:

find . -name '????321.c' | grep -i '/WSFY[^/]*$'

或在zsh中:

print -rl -- **/(#i)WSFY321.c

@Gillesgrep版本仅过滤大写字母,我不理解'[^
/]'..(not

@Gilles在第一种情况(精确的文件名)上使用单引号而不使用完全没有引号的参数是什么?
伯恩哈德'02

@ Peter.O否*后,/在bash的版本。我是说grep -i。我使用[^/]*而不是.*为了不捕获名称以开头的目录中的文件WSFY
吉尔斯2012年

5
@ Bernhard一致性。
吉尔斯2012年

谢谢吉尔斯:我删除了前面的注释,使用了不正确的语法,并测试了修改后的版本,但是如果没有*,它就无法工作(出于意外原因;至少对我而言)。不区分大小写的选项不再有效:shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c......我想这就是为什么它被称为NOCASE 水珠:它只能在水珠的情况下(或者看起来是这样)。
Peter.O 2012年

1

macOS的两种解决方案:

使用GNU find

brew install findutils --with-default-names
# restart Terminal
find . -iname 'WSFY321.c'

使用GNU sed

brew install gnu-sed --default-names
# restart Terminal
find -name "$(sed 's|\([[:alpha:]]\)|[\U\1\L\1]|g' <<<'WSFY321.c')"

1
在macOS Sierra上,默认情况下-iname选项可用。
ThomasW
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.