2016-03-19 8 views
0

ich eine Suchzeichenfolge, die in einem Pfad alle Instanzen eines bestimmten Dateinamen findet, etwa so:Einfügen von Text in einem ‚finden‘ Befehl Suche

find /opt/logs* -type f -name "deploy.log" -exec ls {} \; 

Ich brauche das Ergebnis mit ‚FINENAME = zurückzukehren Vor jeder Zeile. Es ist schwer, den besten Weg zu finden.

Antwort

1
find /opt/logs* -type f -name deploy.log | sed 's/^/FILENAME=/' 

Beachten Sie, wenn Sie ein Verzeichnis mit dem Namen /opt/logs (und Sie versuchen, nicht in /opt/logs-foo/ und /opt/logs-date zu suchen, oder dergleichen) können Sie die * fallen und schreiben können find /opt/logs -type ...

+0

Dies würde keine Zeilenumbrüche in den Dateinamen beibehalten. ;) – hek2mgl

+0

Nein, aber das gewünschte Ergebnis ("auf jeder Zeile vorangestellt") ist in diesem Fall etwas mehrdeutig. –

+0

imho macht es keinen Sinn, dass ein Dateiname mit einem Newline-Zeichen als 'FILENAME = line1' ...' FILENAME = line2' in der Ausgabe erscheint. Tut mir leid pedantisch zu sein .. :) – hek2mgl

1

Verwenden Sie die Option -printf:

find /opt/logs* -type f -name "deploy.log" -printf='FILENAME=%p\n' 

%p wird auf den Namen der Datei erweitert erhalten.

+0

Hmmm, sich schuldig zu fühlen, dass Meine Sed-Lösung wurde akzeptiert. Obwohl das Filtern durch sed eine äußerst nützliche Technik ist, mit der jeder vertraut sein sollte, ist dies die bessere Lösung. –

+0

Der Tag des Jüngsten Gerichts wird kommen und die Welt wird von Dateien mit Zeilenumbrüchen in ihren Namen regiert werden! :) – hek2mgl

Verwandte Themen