Мне нужно искать в большом дереве каталогов большое количество возможных имен файлов, т.е. у меня есть входной файл с длинным списком строк, которые мне нужно найти в дереве (или, как показано ниже: распечатать все те, которые не находятся в дерево)
Как решение на основе файловой системы я могу сделать что-то вроде этого:
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, которое я предлагаю?