GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Schnellere Alternativen zu finden und zu lokalisieren?

Suchen nach Quelldateien in einem Projekt

Verwenden Sie einen einfacheren Befehl

Im Allgemeinen befindet sich die Quelle für ein Projekt wahrscheinlich an einem Ort, vielleicht in ein paar Unterverzeichnissen, die nicht mehr als zwei oder drei tief verschachtelt sind, sodass Sie einen (möglicherweise) schnelleren Befehl wie

verwenden können
(cd /path/to/project; ls *.c */*.c */*/*.c)

Verwenden Sie Projektmetadaten

In einem C-Projekt haben Sie normalerweise ein Makefile. In anderen Projekten haben Sie vielleicht etwas Ähnliches. Dies kann eine schnelle Möglichkeit sein, eine Liste von Dateien (und ihren Speicherorten) zu extrahieren. Schreiben Sie ein Skript, das diese Informationen verwendet, um Dateien zu finden. Ich habe ein "Quellen"-Skript, damit ich Befehle wie grep variable $(sources programname) schreiben kann .

Suche beschleunigen

Suchen Sie weniger Orte statt find / … Verwenden Sie find /path/to/project … wo möglich. Vereinfachen Sie die Auswahlkriterien so weit wie möglich. Verwenden Sie Pipelines, um einige Auswahlkriterien zu verschieben, wenn dies effizienter ist.

Außerdem können Sie die Suchtiefe einschränken. Für mich verbessert dies die Geschwindigkeit des "Findens" erheblich. Sie können den Schalter -maxdepth verwenden. Zum Beispiel '-maxdepth 5'

Suche beschleunigen

Stellen Sie sicher, dass die Orte, an denen Sie interessiert sind, indiziert werden. Lesen Sie die Manpage und nutzen Sie die für Ihre Aufgabe geeigneten Optionen.

   -U <dir>
          Create slocate database starting at path <dir>.

   -d <path>
          --database=<path> Specifies the path of databases to search  in.


   -l <level>
          Security  level.   0  turns  security checks off. This will make
          searchs faster.   1  turns  security  checks  on.  This  is  the
          default.

Das Suchen entfällt

Vielleicht suchen Sie, weil Sie vergessen haben, wo etwas ist oder nicht gesagt wurde. Im ersteren Fall Notizen (Dokumentation) schreiben, im letzteren Fall fragen? Konventionen, Standards und Konsistenz können sehr hilfreich sein.


Ich habe den Teil "Beschleunigung der Ortung" von RedGrittyBricks Antwort verwendet. Ich habe eine kleinere Datenbank erstellt:

updatedb -o /home/benhsu/ben.db -U /home/benhsu/ -e "uninteresting/directory1 uninteresting/directory2"

zeigt dann auf locate dabei:locate -d /home/benhsu/ben.db


Eine Taktik, die ich verwende, ist die Anwendung des -maxdepth Option mit find :

find -maxdepth 1 -iname "*target*"

Wiederholen Sie dies mit zunehmender Tiefe, bis Sie finden, wonach Sie suchen, oder Sie des Suchens müde werden. Die ersten Iterationen werden wahrscheinlich sofort zurückgegeben.

Dadurch wird sichergestellt, dass Sie keine Zeit damit verschwenden, die Tiefen massiver Unterbäume zu durchsuchen, wenn das, wonach Sie suchen, eher in der Nähe der Basis der Hierarchie liegt.

Hier ist ein Beispielskript, um diesen Prozess zu automatisieren (Strg-C, wenn Sie sehen, was Sie wollen):

(
TARGET="*target*"
for i in $(seq 1 9) ; do
   echo "=== search depth: $i"
   find -mindepth $i -maxdepth $i -iname "$TARGET"
done
echo "=== search depth: 10+"
find -mindepth 10 -iname $TARGET
)

Beachten Sie, dass die damit verbundene inhärente Redundanz (jeder Durchlauf muss die in den vorherigen Durchläufen verarbeiteten Ordner durchlaufen) weitgehend durch Festplatten-Caching wegoptimiert wird.

Warum nicht find Haben Sie diese Suchreihenfolge als integrierte Funktion? Vielleicht, weil es kompliziert/unmöglich zu implementieren wäre, wenn Sie davon ausgehen, dass die redundante Traversierung nicht akzeptabel ist. Die Existenz von -depth Option weist auf die Möglichkeit hin, aber leider...


Linux
  1. Pgrep- und Pkill-Alternativen unter Mac OS X?

  2. Wie suche ich nach Dateien nach Größe und Erweiterung?

  3. Suchen Sie eine Datei mit den Befehlen Suchen und Suchen in Linux

  4. Verwenden Sie Find and Locate, um unter Linux nach Dateien zu suchen

  5. Was ist der Unterschied zwischen dem Befehl „locate“ und „find“ in Linux?

Möglichkeiten zur Verwendung des Befehls „find“, um Verzeichnisse effizienter zu durchsuchen

Verwenden von Befehlen zum Suchen und Suchen in Linux:Ein Leitfaden für Anfänger

Muster finden und verschieben?

Befehl Grep und Locate verwenden?

Finden Sie Befehl in Linux/UNIX

Wie kombiniert man find und grep für eine komplexe Suche? ( GNU/Linux, finden, grep )