linux: soll tree -i -f -L $ tiefe schneller sein als -maxdepth $ tiefe finden?

834
719016

Ich frage bestimmte Verzeichnisse ab, um zu sehen, ob ich Dateien mit einem bestimmten Muster darin finde. Ich habe es mit zwei verschiedenen Befehlen versucht:

Standardbefehl find:

find -L $unix_dir\*/ -maxdepth $maxdepth -name \"$filepattern\" 

und ein treeund ein grepBefehlsersatz:

tree -L $maxdepth -l -i -f $unix_dir*/ | grep '$filepattern' 

Soll der zweite aus irgendeinem Grund schneller sein? Ich finde, es ist manchmal schneller, aber manchmal genauso schnell wie der andere Befehl, und ich bin mir nicht sicher, was die Theorie hinter beiden ist. Irgendwelche Ideen?

5
Versuchen Sie zuerst den Befehl `find` und dann * sofort * den` Baum | grep` befehl? Wenn ja, wird die Verzeichnisstruktur wahrscheinlich im Speicher zwischengespeichert, während sie von "find" analysiert wird. Rain vor 11 Jahren 3

2 Antworten auf die Frage

1
Alexey Ivanov

Ich würde sagen, der zweite Prozess ist langsamer, da er zwei Prozesse umfasst treeund grepder erste Prozess nur einen Prozess hat find.

Darüber hinaus treeschreibt die Namen aller Dateien, die er zu seinem Ausgangsstrom findet, die dann durch verbraucht wird grep. Gleichzeitig werden findnur die Namen der übereinstimmenden Dateien gedruckt.

Bei der Verwendung findwird versucht, nur den Dateinamen mit dem angegebenen Namen abzugleichen $filepattern. Im zweiten Fall wird das Muster auf den vollständigen Pfad der Datei angewendet . Im zweiten Fall müssen also mehr Daten verarbeitet werden.

 
Auf der anderen Seite ist der Flaschenhals in diesem Test Disk IO. Beide findund treedie Verzeichnisse durchlaufen.
Wenn Sie jeden Test nacheinander ausführen, speichert das Betriebssystem die Daten über die Verzeichnisse und Dateinamen. Der Befehl wird daher schneller ausgeführt.

0
Zhen

The command find write more characters into the screen because it writes always the full path to the file. Also, the comparation with a filepattern can be longer in the find command (depends on the implementation). E.g, with pseudocode:

  • find

    • Extract filename
    • Compare filename with filepattern
  • tree

    • Compare filename with filepattern
Ich würde erwarten, dass das Schreiben des vollständigen Pfads kein Problem ist, da die Baumoptionen, die ich verwende, gleich sind. 719016 vor 11 Jahren 0