如何使用“find”不区分大小写(使用“*”通配符)进行搜索?

如何使用“find”不区分大小写(使用“*”通配符)进行搜索?

主要问题是我的目录有很多大写文件(例如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*"
}

相关内容