我正在巨大的目录层次结构中寻找文件“ WSFY321.c”。
通常我会使用GNU find:find . -name "WSFY321.c"
但是我不知道大小写,它可以是大写,小写或二者兼而有之。
查找此文件的最简单方法是什么?
有比这更好的东西find . | grep -i "WSFY321.c"
吗?
我正在巨大的目录层次结构中寻找文件“ WSFY321.c”。
通常我会使用GNU find:find . -name "WSFY321.c"
但是我不知道大小写,它可以是大写,小写或二者兼而有之。
查找此文件的最简单方法是什么?
有比这更好的东西find . | grep -i "WSFY321.c"
吗?
Answers:
GNU的最新版本find
具有一个-iname
标志,用于不区分大小写的名称搜索。
find . -iname "WSFY321.c"
find . -iname \*WSFY321.c\* -type f
使用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
grep
版本仅过滤大写字母,我不理解'[^
*
后,/
在bash的版本。我是说grep -i
。我使用[^/]*
而不是.*
为了不捕获名称以开头的目录中的文件WSFY
。
shopt -s extglob nocaseglob globstar; printf '%s\n' **/WSFY321.c
......我想这就是为什么它被称为NOCASE 水珠:它只能在水珠的情况下(或者看起来是这样)。
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')"
-type f
标志,这样就不会费心寻找的名称,如果索引节点是一个目录。但这就是优化的