Suche nach einer großen Anzahl möglicher Dateinamen in einem großen Verzeichnisbaum

Suche nach einer großen Anzahl möglicher Dateinamen in einem großen Verzeichnisbaum

Ich muss einen großen Verzeichnisbaum nach einer großen Anzahl möglicher Dateinamen durchsuchen, d. h. ich habe eine Eingabedatei mit einer langen Liste von Zeichenfolgen, die ich im Baum finden muss (oder wie unten: alle Zeichenfolgen ausdrucken, die nicht im Baum sind).

Als dateisystembasierte Lösung kann ich so etwas tun:

while read a;
do
    count=`find /path/to/dir -name "*$a*" | wc -l`; ;
    if [ $count -eq 0 ];
    then
    echo $a;
    fi
done < inputnames.txt

was angesichts der Größe des Baums und der Größe der Eingabedatei äußerst ineffizient ist. Ich dachte dann, ich könnte die Ausgabe einfach findin eine Datei kopieren

find /path/to/dir > pathtodir_tree.txt

und greppen Sie dann die Datei.

while read a;
do
    count=`grep $a pathtodir_tree.txt | wc -l`;
    if [ $count -eq 0 ];
    then
    echo $a;
    fi
done < inputnames.txt

was viel schneller ist. Meine Fragen sind: Übersehe ich eine effizientere dateisystembasierte Lösung? Wenn nicht, gibt es eine andere Lösung, die effizienter (oder allgemein besser) ist als die von mir vorgeschlagene grep-basierte Lösung?

Antwort1

Das funktioniert bei mir (wenn Sie diese Dateien finden möchtennichtÜbereinstimmung; andernfalls lassen Sie das „v“ aus der grep-Option weg):

find /path/to/dir > tree.txt
grep -vf inputnames.txt tree.txt

Und wenn Sie wissen möchten, wie viele es sind:grep -vf inputnames.txt tree.txt | wc -l

Dies findet/zählt alle Vorkommen in tree.txt, dienichtpasst zu einer beliebigen Zeichenfolge in inputnames.txt.

verwandte Informationen