grep wird verwendet, um in einer Datei zu suchen, ob eine Zeile mit einem bestimmten regulären Ausdruck übereinstimmt. Ich habe jedoch diese Situation - ich möchte einen regulären Ausdruck schreiben, der mit dem Dateinamen (und nicht dem Inhalt der Datei) übereinstimmt. Ich werde dies vom Stammverzeichnis des Systems aus ausführen, um alle Dateien zu finden, die dem regulären Ausdruck entsprechen.
Wenn ich beispielsweise alle VB - Formulardateien finden möchte, die mit einem "f" beginnen und mit .frm enden, verwende ich den regulären Ausdruck
"f[[:alnum:]]*\.frm"
Kann grep das tun? Wenn nicht, gibt es ein Dienstprogramm, mit dem ich das tun könnte? Vielen Dank.
In diesem Fall müssen Sie find
anstelle von grep
verwenden.
Sie können auch find
in Kombination mit grep
oder egrep
verwenden:
$ find | grep "f[[:alnum:]]\.frm"
Wie Pablo sagte, müssen Sie find
anstelle von grep
verwenden, aber es ist nicht erforderlich, find
an grep
zu übergeben. find
hat diese Funktionalität eingebaut:
find . -regex 'f[[:alnum:]]\.frm'
find
ist ein sehr leistungsfähiges Programm zum Suchen von Dateien nach Namen. Es unterstützt die Suche nach Dateityp und die Einschränkung der Tiefe, die Kombination verschiedener Suchbegriffe mit booleschen Operationen und die Ausführung beliebiger Befehle für gefundene Dateien. Siehe die Find-Manpage für weitere Informationen.
Beispiel
find <path> -name *FileName*
Vom Handbuch:
Suchmuster
Die Basis des Dateinamens (der Pfad, in dem die führenden Verzeichnisse entfernt wurden) stimmt mit dem Shell-Mustermuster .. überein. Da die führenden Verzeichnisse entfernt werden, enthalten die Dateinamen, die für eine Übereinstimmung mit -name berücksichtigt werden, niemals. name a/b "wird nie mit irgendetwas übereinstimmen (wahrscheinlich müssen Sie stattdessen -path verwenden). Die Metazeichen ("*", "?" Und "[]") stimmen mit einem "." am Anfang des Basisnamens (dies ist eine Änderung in find ‐ utils-4.2.2; siehe Abschnitt NORMENKONFORMANCE unten). Um ein Verzeichnis und die darin enthaltenen Dateien zu ignorieren, verwenden Sie Use -Prune; Ein Beispiel finden Sie in der Beschreibung von -path. Zahnspangen werden nicht als etwas Besonderes erkannt, ..., obwohl einige Shells, einschließlich Bash, Zahnspangen mit einer speziellen Bedeutung in Shell-Mustern enthalten. Der Dateinamensabgleich wird mit der Bibliotheksfunktion fnmatch (3) durchgeführt. Vergessen Sie nicht, das Muster in Anführungszeichen zu setzen, um es vor der Erweiterung durch die Shell zu schützen.
find -iname "file_name"
Syntax :-
find -type type_descriptor file_name_here
typ_deskriptor Typen: -
f: reguläre Datei
d: Verzeichnis
l: symbolischer Link
c: Zeichengeräte
b: Geräte blockieren
tree -f | grep filename
findfile(){ tree -f | grep $1; } # $1 = filename, -f is full path
Sie können auch tun:
tree | grep filename
Dadurch wird die Ausgabe des Tree-Befehls für eine Suche an grep weitergeleitet. Dadurch erfahren Sie nur, ob die Datei existiert.
Nein, grep funktioniert gut dafür:
grep -rl "filename" [starting point]
grep -rL "not in filename"
Auch für mehrere Dateien.
tree /path/to/directory/ | grep -i "file1 \| file2 \| file3"