大文字と小文字を区別せずに検索に「find」を使用する方法(「*」ワイルドカード文字を使用)

大文字と小文字を区別せずに検索に「find」を使用する方法(「*」ワイルドカード文字を使用)

最大の問題は、私のディレクトリに大文字のファイルが多いことです。(例:Foobar.txt、、、FooBar.txtでもFOOBAR.txt。正確に入力してファイルを見つけるのは混乱しています。(正しいファイル名がわかっている場合find? )。だから私はただ入力し、foobar3つのファイルすべてが結果に表示されるようにします。

また、*文字列の両側を使用して、ファイル名の前後の文字数を一致させます。

これを行うエイリアスまたは関数が欲しい。

答え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*"
}

関連情報