在大型目录树中搜索大量可能的文件名

在大型目录树中搜索大量可能的文件名

我需要在一个大型目录树中搜索大量可能的文件名,即我有一个输入文件,其中包含一长串字符串,我需要在树中找到这些字符串(或如下所示:打印所有不在树中的字符串)

作为基于文件系统的解决方案,我可以做这样的事情:

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

相关内容