
我需要在大型目錄樹中搜索大量可能的文件名,即我有一個輸入文件,其中包含一長串我需要在樹中找到的字符串(或如下所示:打印所有不在目錄中的字符串)樹)
作為基於檔案系統的解決方案,我可以這樣做:
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
。