我想使用 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]
x
X
x
x
对于某些字符,例如ffi
大写或小写翻译不是单个字符,您可能需要求助于以下方法:
find "$file_dir1" "$file_dir2" \
\( -name '*[sS][uU]ffi[xX]' -o -name '*[sS][uU]FFI[xX]' \)
as[ffiFFI]
将匹配ffi
,F
或I
而不是ffi
或FFI
。
如果您可以保证文件和目录名不包含换行符,您还可以find
打印每个文件路径,并使用awk
文件名进行过滤:
find "$file_dir1" "$file_dir2" |
awk -F/ 'tolower($NF) ~ /^searchpattern/'
(请注意,它不一定等同toupper($NF) ~ /^SEARCHPATTERN/
于ffi
上面的情况,或者因为并非每个人(每个区域设置)都同意字母的大写或小写变体是什么(例如,是大写i
I
还是İ
?);您还可以找到一些不区分grep -i
大小写匹配的工具或其他工具)。