Find 命令中忽略大小写

Find 命令中忽略大小写

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

find $file_dir1 $file_dir2  -name 'searchpattern*' | tail -10

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

答案1

find "$file_dir1" "$file_dir2" \
  -name '[sS][eE][aA][rR][cC][hH][pP][aA][tT][tT][eE][rR][nN]*'

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

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

find "$file_dir1" "$file_dir2" \
  \( -name '*[sS][uU]ffi[xX]' -o -name '*[sS][uU]FFI[xX]' \)

as[ffiFFI]将匹配,FI而不是FFI

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

find "$file_dir1" "$file_dir2" |
  awk -F/ 'tolower($NF) ~ /^searchpattern/'

(请注意,它不一定等同toupper($NF) ~ /^SEARCHPATTERN/上面的情况,或者因为并非每个人(每个区域设置)都同意字母的大写或小写变体是什么(例如,是大写i I还是İ?);您还可以找到一些不区分grep -i大小写匹配的工具或其他工具)。

相关内容