Ausgabe dieses Befehls Linux

Ausgabe dieses Befehls Linux

Bitte hat jemand eine Idee über die Ausgabe dieses Befehls? Ich habe viel darüber gegoogelt, aber ich kann nichts Nützliches finden

find . -type f -exec grep -H PATH {} \;

Dank im Voraus

Antwort1

Der Befehl

find . -type f -exec grep -H PATH {} \;

findet alle regulären Dateien ( -type f) im aktuellen Verzeichnis ( .) oder darunter und führt für jede dieser Dateien grep -H PATH {}mit aus {} , wobei „ durch den vollständigen Pfadnamen der Datei relativ zum aktuellen Verzeichnis ersetzt wird.“

Die -HOption to grepist nicht standardmäßig, wird aber häufig implementiert und stellt sicher, dass jeder übereinstimmenden Zeile der Pfadname der Datei vorangestellt wird, in der die Zeile gefunden wurde. Sie können den Befehl grep PATH /dev/null {}stattdessen in ändern, um zu erzwingen, grepdass immer der Pfadname der Datei ausgegeben wird, die die übereinstimmenden Zeilen enthält (standardmäßig grepgeschieht dies, wenn in der Befehlszeile mindestens zwei Dateien angegeben sind).

Das verwendete Muster grepist die Zeichenfolge PATH.

Zusammenfassend: Der Befehl findet und gibt alle Zeilen aus allen regulären Dateien im aktuellen Verzeichnis oder darunter aus, die den Teilstring PATHirgendwo erwähnen. Jeder Zeile ist der Pfadname der Datei vorangestellt, die die Zeile enthält.

Ein Ausschnitt der Ausgabe, die ich erhalte, wenn ich dies in meinem persönlichen Home-Verzeichnis ausführe:

./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_NM:FILEPATH=/usr/bin/nm
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_RANLIB:FILEPATH=/usr/bin/ranlib
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_INSTALL_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_SKIP_RPATH:BOOL=NO
./Documents/Pathfinder/build/CMakeCache.txt:CMAKE_STRIP:FILEPATH=/usr/bin/strip

Der Befehl könnte effizienter gestaltet werden, indem man grepihn in Stapeln auf möglichst viele Dateien gleichzeitig ausführt, statt einmal für jede Datei:

find . -type f -exec grep -F -e PATH /dev/null {} +

grepIch habe mir auch die Freiheit genommen, den Befehl hier leicht zu ändern, indem ich hinzugefügt habe -F, dass er die Zeichenfolge PATHalsSchnurund nicht als regulärer Ausdruck. Die -eOption wird nur verwendet, um anzugeben, dass das nächste Argument das Muster ist (nützlich, wenn das Muster später in etwas geändert wird, das beispielsweise mit einem Bindestrich beginnt).

Es ist die Änderung von \;„zu“ +am Ende des -execPrädikatarguments, die dazu führt, dass die gefundenen Pfadnamen in Stapeln gesammelt werden, anstatt das Dienstprogramm für jeden einzelnen auszuführen.

verwandte Informationen