поиск большого количества возможных имен файлов в большом дереве каталогов

поиск большого количества возможных имен файлов в большом дереве каталогов

Мне нужно выполнить поиск в большом дереве каталогов для большого количества возможных имен файлов, т. е. у меня есть входной файл с длинным списком строк, которые мне нужно найти в дереве (или, как показано ниже: вывести все те, которых нет в дереве)

В качестве решения на основе файловой системы я могу сделать что-то вроде этого:

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

Это работает для меня (если вы хотите найти эти файлынетсоответствие; в противном случае опустите v из параметра grep):

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

А если вы хотите узнать, сколько их:grep -vf inputnames.txt tree.txt | wc -l

Это находит/подсчитывает все вхождения в tree.txt, которые делаютнетсоответствует любой строке в inputnames.txt.

Связанный контент