在查找命令中忽略大小写

0 linux find case-sensitivity

我想使用 find 命令在 2 个不同目录中搜索文件,

find $file_dir1 $file_dir2  -name 'searchpattern*' | tail -10
Run Code Online (Sandbox Code Playgroud)

我现在正在使用这个命令,但它是区分大小写的搜索。我试过了-iname,我的 linux 机器不支持它。我需要列出所有忽略大小写的文件。

Sté*_*las 5

find "$file_dir1" "$file_dir2" \
  -name '[sS][eE][aA][rR][cC][hH][pP][aA][tT][tT][eE][rR][nN]*'
Run Code Online (Sandbox Code Playgroud)

也就是说,我们用匹配或x[xX]括号表达式替换字母,有效地将区分大小写的小写匹配替换为不区分大小写的匹配。xXxx

对于某些字符,例如?大写或小写翻译不是单个字符,您可能需要求助于以下内容:

find "$file_dir1" "$file_dir2" \
  \( -name '*[sS][uU]?[xX]' -o -name '*[sS][uU]FFI[xX]' \)
Run Code Online (Sandbox Code Playgroud)

as[?FFI]将匹配?, ForI而不是?or FFI

如果您可以保证您的文件和目录名称不包含换行符,您还可以find打印每个文件路径,并用于awk过滤文件名:

find "$file_dir1" "$file_dir2" |
  awk -F/ 'tolower($NF) ~ /^searchpattern/'
Run Code Online (Sandbox Code Playgroud)

(请注意,它不一定等同于上面toupper($NF) ~ /^SEARCHPATTERN/?情况,或者因为并非每个人(每个语言环境)都同意字母的大写i I或小写变体是什么(例如,是大写还是??);您也会找到一些变体grep -i或其他进行大小写不敏感匹配的工具)。