큰 디렉토리 트리에서 가능한 많은 파일 이름 검색

큰 디렉토리 트리에서 가능한 많은 파일 이름 검색

가능한 많은 파일 이름을 찾기 위해 큰 디렉토리 트리를 검색해야 합니다. 즉, 트리에서 찾아야 하는 긴 문자열 목록이 있는 입력 파일이 있습니다(또는 아래와 같이: 나무)

파일 시스템 기반 솔루션으로서 다음과 같은 작업을 수행할 수 있습니다.

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.

관련 정보