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 selbst (und nicht mit dem Inhalt der Datei) übereinstimmt. Ich werde dies aus dem Stammverzeichnis des Systems ausführen, um alle Dateien zu finden, die dem regulären Ausdruck entsprechen.
Wenn ich beispielsweise alle VB-Formulardateien suchen möchte, die mit einem "f" beginnen und mit .frm enden, verwende ich den regulären Ausdruck -
"f[[:alnum:]]*\.frm"
Kann grep das machen? Wenn nicht, gibt es ein Dienstprogramm, mit dem ich dies tun kann? Vielen Dank.
-regex
Option integriert.Beispiel
Aus dem Handbuch:
find-name pattern
Die Basis des Dateinamens (der Pfad mit den entfernten führenden Verzeichnissen) entspricht dem Shell-Mustermuster. Da die führenden Verzeichnisse entfernt werden, enthalten die Dateinamen, die für eine Übereinstimmung mit -name berücksichtigt werden, niemals einen Schrägstrich, sodass "-name a / b" niemals mit irgendetwas übereinstimmt (Sie müssen wahrscheinlich 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 STANDARDS CONFORMANCE unten). Verwenden Sie -prune, um ein Verzeichnis und die darunter liegenden Dateien zu ignorieren. Siehe ein Beispiel in der Beschreibung von -path. Zahnspangen werden nicht als besonders anerkannt, obwohl einige Muscheln, einschließlich Bash, Zahnspangen mit einer besonderen Bedeutung in Muschelmustern durchdringen. Der Dateinamenabgleich wird unter Verwendung der Bibliotheksfunktion fnmatch (3) durchgeführt. Vergessen Sie nicht, das Muster in Anführungszeichen zu setzen, um es vor einer Erweiterung durch die Shell zu schützen.
quelle
find . -maxdepth 1 -name "*filename*" -print
Als Pablo sagte, müssen Sie verwenden
find
stattgrep
, aber es gibt kein Bedürfnis,find
zugrep
.find
hat diese Funktionalität eingebaut:find
ist ein sehr leistungsfähiges Programm zum Suchen nach Dateien nach Namen und unterstützt das Suchen nach Dateityp, Tiefenbegrenzung, Kombinieren verschiedener Suchbegriffe mit booleschen Operationen und Ausführen beliebiger Befehle für gefundene Dateien. Siehe die Fund Manpage für weitere Informationen.quelle
-mtime
und-mmin
Sie können den vollständigen Pfad einer Datei mit grep ermitteln. Leiten Sie einfach die Ausgabe des Baums weiter
Hier ist eine Funktion, die Sie in Ihr .bash_profile oder .bashrc einfügen können
quelle
type_descriptor types: -
f: reguläre Datei
d: Verzeichnis
l: symbolische Verbindung
c: Zeichengeräte
b: Geräte blockieren
quelle
-type typedescriptor
allein folgt . Ist das ein Fehler?Sie können auch tun:
Dadurch wird die Ausgabe des Befehls tree an grep weitergeleitet, um nach einer Suche zu suchen. Hier erfahren Sie jedoch nur, ob die Datei vorhanden ist.
quelle
Nein, grep funktioniert gut dafür:
quelle
-l
als auch die-L
Optionen erheblich missverstanden .Auch für mehrere Dateien.
quelle
Der einfachste Weg ist
Hier finden find alle Dateien im (.) dh aktuellen Verzeichnis rekursiv. Und dann ist es nur ein einfacher Grep. Alle Dateien mit dem Namen "test" werden angezeigt.
Sie können mit Grep gemäß Ihren Anforderungen spielen. Hinweis: Da es sich bei grep um eine generische Zeichenfolgenklassifizierung handelt, können nicht nur Dateinamen angezeigt werden. Wenn ein Pfad jedoch ein Verzeichnis ('/xyz_test_123/other.txt') hat, wird auch die Ergebnismenge angezeigt. Prost
quelle
./foo/bar/latest/fred.txt
.