大きなディレクトリツリー内の多数のファイル名を検索する

大きなディレクトリツリー内の多数のファイル名を検索する

大規模なディレクトリ ツリーで多数の可能性のあるファイル名を検索する必要があります。つまり、ツリー内で検索する必要がある文字列の長いリストを含む入力ファイルがあります (または以下のように: ツリー内にないものをすべて印刷します)。

ファイル システム ベースのソリューションとして、次のようなことができます。

while read a;
do
    count=`find /path/to/dir -name "*$a*" | wc -l`; ;
    if [ $count -eq 0 ];
    then
    echo $a;
    fi
done < inputnames.txt

これはツリーのサイズと入力ファイルのサイズを考えると非常に非効率的です。そこで、出力をfindファイルにダンプするだけでよいと考えました。

find /path/to/dir > pathtodir_tree.txt

そして、ファイルをgrepします。

while read a;
do
    count=`grep $a pathtodir_tree.txt | wc -l`;
    if [ $count -eq 0 ];
    then
    echo $a;
    fi
done < inputnames.txt

はるかに高速です。私の質問は、より効率的なファイル システム ベースのソリューションを見逃しているかどうかです。そうでない場合、私が提案している grep ベースのソリューションよりも効率的な (または一般的に優れた) 別のソリューションはありますか?

答え1

これは私にとってはうまくいきます(ファイルを見つけたい場合ない一致しない場合は、grep オプションから v を省略します):

find /path/to/dir > tree.txt
grep -vf inputnames.txt tree.txt

いくつあるか知りたい場合は、次の手順に従ってください。grep -vf inputnames.txt tree.txt | wc -l

これはtree.txt内の以下のすべての出現箇所を検索/カウントします。ない内のいずれかの文字列に一致しますinputnames.txt

関連情報