在大型目錄樹中搜尋大量可能的檔案名

在大型目錄樹中搜尋大量可能的檔案名

我需要在大型目錄樹中搜索大量可能的文件名,即我有一個輸入文件,其中包含一長串我需要在樹中找到的字符串(或如下所示:打印所有不在目錄中的字符串)樹)

作為基於檔案系統的解決方案,我可以這樣做:

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

相關內容