通常我会使用GNU查找:
find . -name "WSFY321.c"
但是我不知道这种情况,它可能是大写,小写或混合使用
找到此文件的最简单方法是什么?
是否有比
find . | grep -i "WSFY321.c"
更好的东西?#1 楼
GNUfind
的最新版本具有-iname
标志,用于不区分大小写的名称搜索。find . -iname "WSFY321.c"
#2 楼
使用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
评论
@Gilles grep版本仅过滤大写字母,我不理解'[^ /]'..(not /)
– Peter.O
2012年2月20日在6:22
@Gilles在第一种情况(精确的文件名)上使用单引号而不使用完全没有引号的参数是什么?
–伯恩哈德
2012年2月20日在7:14
@ Peter.O bash版本中的/后没有*。我的意思是grep -i。我使用[^ /] *而不是。*,以免在名称以WSFY开头的目录中捕获文件。
–吉尔斯'所以-不再是邪恶的'
2012年2月20日在10:08
@ Bernhard一致性。
–吉尔斯'所以-不再是邪恶的'
2012年2月20日在10:08
谢谢吉尔斯:我删除了前面的注释,使用了不正确的语法,并测试了修订后的版本,但是如果没有*,它就无法工作(出于意外原因;至少对我而言)。不区分大小写的选项不再起作用:shopt -s extglob nocaseglob globstar; printf'%s \ n'** / WSFY321.c ...我想这就是为什么它被称为nocase球的原因:它仅在一个球的上下文中起作用(或者看起来)。
– Peter.O
2012年2月20日在11:34
#3 楼
适用于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\L]|g' <<<'WSFY321.c')"
评论
在macOS Sierra上,默认情况下-iname选项可用。
– ThomasW
17年5月25日,1:13
评论
另外,由于您要专门查找文件,因此您可以使用-type f标志将其剔除几下,如果inode是目录,它就不会打扰到该名称。但这就是学步的优化水平...
– Shadur
2012年2月20日在9:47
对于某些正则表达式,您可以找到。 -iname \ * WSFY321.c \ *-键入f
– Benj
16年6月11日在22:01