it-swarm.com.de

Finden Sie alle Dateien, die mit 'name' im Linux-System übereinstimmen, und suchen Sie nach 'text'.

Ich muss alle Instanzen von 'filename.ext' auf einem Linux-System finden und sehen, welche den Text 'lookingfor' enthalten.

Gibt es eine Reihe von Linux-Befehlszeilenoperationen, die funktionieren würden?

25
siliconpi
find / -type f -name filename.ext -exec grep -l 'lookingfor' {} +

Die Verwendung eines + zum Beenden des Befehls ist effizienter als \;, da find einen ganzen Stapel von Dateien an grep sendet, anstatt sie einzeln zu senden. Dies vermeidet eine Fork/exec für jede einzelne gefundene Datei.

Vor einiger Zeit habe ich einige Tests durchgeführt, um die Leistung von xargs vs {} + vs {} \; zu vergleichen, und ich fand, dass {} + schneller war. Hier sind einige meiner Ergebnisse:

time find . -name "*20090430*" -exec touch {} +
real    0m31.98s
user    0m0.06s
sys     0m0.49s

time find . -name "*20090430*" | xargs touch
real    1m8.81s
user    0m0.13s
sys     0m1.07s

time find . -name "*20090430*" -exec touch {} \;
real    1m42.53s
user    0m0.17s
sys     0m2.42s
29
dogbane

Wechseln Sie in das entsprechende Verzeichnis und geben Sie den folgenden Befehl ein.

finden . -name "* .ext" | xargs grep 'Auf der Suche nach'

6
Amareswar

Eine einfachere wäre,

find / -type f -name filename.ext -print0 | xargs -0 grep  'lookingfor'

-print0, um & 0 zu xargs zu finden, würde das Problem einer großen Anzahl von Dateien in einem einzigen Verzeichnis verringern. 

3
digen

Versuchen:

find / -type f -name filename.ext -exec grep -H -n 'lookingfor' {} \;

find sucht rekursiv ausgehend vom Stamm / nach Dateien mit dem Namen filename.ext. Bei jedem gefundenen Vorkommen führt grep den Dateinamen durch, sucht nach lookingfor und druckt, wenn gefunden, die Zeilennummer (-n) und den Dateinamen (-H).

1
codaddict

Ich finde den folgenden Befehl am einfachsten:

grep -R --include="filename.ext" lookingfor

oder fügen Sie -i zu Groß-/Kleinschreibung hinzu:

grep -i -R --include="filename.ext" lookingfor
0
R. Oosterholt