主要问题是我的目录有很多大写文件(例如Foobar.txt
,,,FooBar.txt
甚至FOOBAR.txt
)。我发现通过准确输入来查找文件很混乱(如果我知道确切的文件名,为什么我要使用find
?)。所以我只想输入foobar
并希望所有三个文件都在结果中
另外,我使用*
字符串的两侧来匹配文件名中前面和后面的任意数量的字符。
我想要一个别名或函数来执行此操作。
答案1
那么正确的方法是
find -iname \*foobar\*
其中-iname
是用于不区分大小写的搜索,而 是\
用于转义*
通配符。
对于这种情况,该函数似乎有点不必要,但很容易编写
function lazyfind ()
{
find -iname \*$1\*
}
答案2
如果您的操作系统缺少 GNU find -iname 选项,这里有一个可移植的方法来实现相同的目的:
cifind()
{
pattern=""
l=${#1}
i=1
while [ $i -le $l ] ; do
lc=$(echo "$1" | cut -c $i-$i | tr '[A-Z]' '[a-z]')
uc=$(echo "$lc" | tr '[a-z]' '[A-Z]')
if [ ."$lc" != ."$uc" ] ; then
pattern="${pattern}[$lc$uc]"
else
pattern="${pattern}$lc"
fi
i=$((i + 1))
done
find . -name "*$pattern*"
}