2017-09-18 4 views
-1

Ich habe gerade angefangen bash und ich mache ein Such-Skript, das nach Dateien suchen und ein Muster grep. Einfache Idee:BASH grep Muster Dateiname am Ende der Zeile

find $HOME -type f | grep $1 

Im aktuellen Skript finde ich alles, was $ 1 (Dateien und Verzeichnisse) enthält. Ich möchte nur das Muster im Dateinamen übereinstimmen, ich möchte nicht die Verzeichnisse im Pfad übereinstimmen. Ich habe viele fortgeschrittene Ausdrücke mit Symbolen wie "/.**$" usw. ausprobiert, um in einem bestimmten Teil zu grepen, aber ehrlich gesagt ist es für einen neuen Benutzer ein bisschen schwierig.

Cut-Tool ist keine Option, weil ich den Pfad der Datei möchte.

EDIT:

Correct Beispiel:

$ ./search test 
/home/user/documents/test.txt 
/home/user/downloads/blahtestblah.py 

Falsches Beispiel:

$ ./search test 
/home/user/test/whatever.txt 

in dem falschen Beispiel grep das Schlüsselwort in dem Pfad angepasst, ein Verzeichnis übereinstimmen.

+0

Können Sie zeigen uns einen tatsächlichen Probeneingang und den Ausgang Sie davon erwarten – Inian

+0

Verwendung:

find $HOME -type f | grep "/.*$1$" 

Sie auch die -regex Schalter auf find statt kochend die Ausgabe grep verwenden könnten 'basename' wie' find $ HOME -type f | grep $ (Basisname $ 1) ', aber warum machst du so? nicht effizient Weg, 'find' kann es tun, ohne' grep' –

+0

Ty, aber hat nicht funktioniert. Ich benutze Grep, weil das Schlüsselwort innerhalb des Namens sein muss, nicht nur der Name selbst. Bearbeitet mit einigen Beispielen – Eisenberk

Antwort

1

^ entspricht der Anfang der Zeichenfolge. Versuchen:

find $HOME -type f -regex ".*$1$" 
+0

Ty aber hat nicht funktioniert :(. – Eisenberk

+0

Aber fast !, Ihr erstes Skript entspricht in der Erweiterung Teil. Zum Beispiel, wenn ich "./search py" gibt alle. PY-Dateien zurück. – Eisenberk