Ich muss nach Dateien suchen, die mit einem bestimmten Namen beginnen. Es kann mehrere Dateien geben, die mit einem bestimmten Muster beginnen, und ich möchte alle im Verzeichnis vorhandenen Dateien auflisten.
58
So vervollständigen Sie vorhandene Antworten:
ls
Das Standard-Verzeichnislisten-Dienstprogramm ls
kann in Kombination mit den Platzhaltern der Shell verwendet werden. So suchen Sie nach allen Dateien mit Muster abc
:
ls abc* # list all files starting with abc---
ls *abc* # list all files containing --abc--
ls *abc # list all files ending with --abc
Beachten Sie, dass die Dateierweiterung auch für die Suchergebnisse relevant ist.
tree
Falls wir Dateien in einem Verzeichnisbaum auflisten müssen, können wir auch tree
nach einem bestimmten Muster suchen :
tree -P 'abc*' # list directory tree of file starting with abc---
tree -l 'def*' # exclude files starting with def---
In diesem Fall werden tree
selbst Platzhalter unterstützt.
ls -l B*
zeigt es den Inhalt aller Verzeichnisse, die mitB
nur den Namen der übereinstimmenden Verzeichnisse beginnen?ls
ein Verzeichnis auflisten möchten , wird es geöffnet. Das entspricht dem Vorgangls -l BirthdayPhotos
. Sie können dieses Verhalten mit unterdrückenls -d B*
.B*
als Verzeichnisspezifikation behandelt ?B*
erweitert wird, dass sie mit allen Verzeichnissen übereinstimmt, die mit beginnenB
, übergeben Sie wirklichls
eine Liste von Verzeichnissen, sodass sie alle für Sie geöffnet werden.ls -d ABC*
war, was der Autor fragte. Auch Kommentare im Code-Snippet sind falsch,ls abc*
listet den Inhalt von Verzeichnissen auf, die mit abc beginnen.Sie können den
find
Befehl verwenden, um Dateien mit einem Muster zu suchenDer obige Befehl durchsucht die Datei, die mit abc beginnt, unter dem aktuellen Arbeitsverzeichnis.
-name 'abc'
listet die Dateien auf, die genau übereinstimmen. ZB: abcSie können auch verwenden
Option mit
find
Befehl zum Suchen des Dateinamens anhand eines Mustersquelle
Es gibt viele Möglichkeiten, dies zu tun, je nachdem, was Sie genau damit machen möchten. Wenn Sie sie nur auflisten möchten, können Sie dies im Allgemeinen in einem Terminal tun, indem Sie Folgendes verwenden:
find | grep '^\./ABC'
... und durch
ABC
Ihren Text ersetzen .Um den Befehl zu verstehen, lassen Sie ihn uns etwas aufschlüsseln:
find
listet alle Dateien unter dem aktuellen Verzeichnis und seinen Unterverzeichnissen auf; Wenn Sie es alleine verwenden, wird dort einfach alles aufgelistet. Beachten Sie, dassfind
jede Datei oder jedes Verzeichnis beginnend mit./
ausgegeben wird, wobei angegeben wird , dass der Pfad relativ zum aktuellen Verzeichnis ist. Es ist wichtig, sich dessen bewusst zu sein, denn dies bedeutet, dass wir nach Ergebnissen suchen, die mit./ABC
und nicht nur mit beginnenABC
.Das Pipe-Zeichen
|
leitet die Ausgabe eines Befehls an einen anderen weiter. In diesem Fall wird die Ausgabe von anfind
weitergeleitetgrep
. Dies nennt man Verrohrung.grep
Nimmt die Ausgabe und filtert sie nach dem vorgegebenen Muster^\./ABC
.' '
, um zu verhindern, dass die Shell die darin enthaltenen Sonderzeichen interpretiert.Jetzt wird das Muster selbst in einer bestimmten Syntax geschrieben, die als regulärer Ausdruck oder kurz Regex bezeichnet wird . Regex ist ein äußerst leistungsfähiges Suchwerkzeug, wenn Sie es beherrschen, und es gibt Websites wie diese, die Sie ausführlicher darüber informieren. Beachten Sie jedoch, dass
grep
es sich nicht um eine vollwertige Regex-Engine handelt und Sie nicht alles damit machen können.Für unseren Zweck:
^
in Regex entspricht dem Anfang der Zeichenfolge; Dadurch wird verhindert, dass es mit dem Muster übereinstimmt, wenn es nicht am Anfang des Dateinamens steht..
In Regex hat das auch eine besondere Bedeutung: Es bedeutet "hier ein beliebiges einzelnes Zeichen finden". Wenn Sie ihn als wörtlichen Punkt verwenden möchten, müssen Sie ihn mit einem Backslash "maskieren"\
. (Ja, es wäre in unserem Fall harmlos, jedes Zeichen abzugleichen, aber ich habe es der Vollständigkeit halber getan.)quelle
find | grep
wennfind
es seine eigenen, vollkommen guten Musteranpassungsfähigkeiten hat?Sie können GREP verwenden. Ich denke, dies ist die einfachste Lösung. Fügen Sie wahrscheinlich auch einige andere grep-Parameter hinzu, um die Übereinstimmung genauer zu machen
quelle
Sie können mit dem Nautilus-Dateimanager und regulären Ausdrücken nach einem bestimmten Muster suchen.
Klicken Sie dazu im Menü Ausrüstung wie unten auf Passende Elemente auswählen (Sie können auch Ctrl+ drücken s).
Geben Sie dann einfach den regulären Ausdruck ein
ABC*
und bestätigen Sie.Jede Datei, deren Name mit Ihrem Muster übereinstimmt, wird automatisch ausgewählt.
Ich verwende Nautilus 3.6. * Von GNOME3 PPA unter Ubuntu 12.10 (Quantal).
quelle
Die einfachste Lösung für mich
Hier können Sie einen beliebigen regulären Ausdruck im PATTERN angeben.
Um beispielsweise Dateien mit "ab" an einer beliebigen Stelle im Namen zu finden, geben Sie Folgendes ein
Um die Dateien zu finden, die mit "ab" beginnen, geben Sie ein
quelle
Wenn Sie das Verzeichnis, in dem sich die
ABC*
Dateien befinden, nicht kennen und über Millionen von Dateien verfügen, ist derlocate
Befehl die schnellste Methode.Anmerkungen:
find
Befehl, der im/
Stammverzeichnis beginnt, sehr lange dauern und viele Berechtigungsfehler verursachen.sudo updatedb
zuerst ausführen .quelle
ich benutze
oder
Es werden alle Dateien mit abc angezeigt, nicht nur abc. Aber es ist eine sehr einfache Möglichkeit für mich, dies zu tun.
quelle
Python:
Perl:
quelle
Dies ist der Glob-Pattern-Matching, der an beiden Enden verankert ist. Dies stimmt mit allen Vorkommen von Dateien überein, die mit "ABC" beginnen, z. B. "ABC", "ABC.txt", "ABC123", jedoch nicht "xABC". Von der Befehlszeile aus ist die Verwendung von 'ls' anstelle von 'printf' eine sichere Alternative. Je nachdem, mit wem Sie einverstanden sind, ist 'ls' jedoch für die Verwendung in einem Skript nicht sicher. In diesem Fall wird die Verwendung von 'printf' mit Glob-Pattern-Matching als sicher angesehen. Wenn Sie dies in einem Skript verwenden möchten, enthält die Ausgabe von 'printf' bis zum Ende des Ausgabestreams kein neues Zeilenzeichen:
Kehrt zurück:
Wenn Sie nach jeder Instanz Zeilenumbrüche benötigen:
Kehrt zurück:
"/ path / to / files /" bleibt in der Ausgabe erhalten, wenn Sie dies beim Ausführen des Befehls 'printf' so eingegeben haben. Ohne es erscheint nur der Dateiname:
Kehrt zurück
Angenommen, Sie führen den Befehl in dem Verzeichnis aus, in dem sich die Dateien befinden.
quelle
echo /path/to/files/ABC* | tr " " "\n"
ist keine gute Idee. Überlegen Sie, ob eine Datei/path/to/files/ABC EFG
vorhanden ist und der Dateiname ein Leerzeichen enthält. Sietr
werden den Dateinamen in zwei separate Zeilen aufteilen, was nicht gut ist. Schlimmer noch, wenn der Dateiname mehrere Leerzeichen enthält. Ich würde empfehlen,printf "%s\n" ABC*
stattdessen zu verwenden, die mit Leerzeichen in den Dateinamen helfen sollte, aber immer noch mit anderen Sonderzeichen wie problematisch ist\n
Kommando-t in einem meiner Lieblings-Vim-Plugins, es ist ein Ruby-basiertes Plugin über der Integration mit FZF.
Mit Comamnd-T und FZF können Sie mit einem extrem schnellen "Fuzzy" -Mechanismus nach Folgendem suchen:
Wie du siehst
Ich suche immer im Befehlsverlauf, indem ich ein neues Terminal öffne und drücke:
Zusätzlich zum rekursiven Durchsuchen aller Ordner durch Schreiben in eine beliebige Terminalregisterkarte:
Dann starten Sie Ihren Dateinamen
Sie können auch hinein schreiben
vim
Besonders in großen Ordnern sehr hilfreich.
quelle
Angenommen, ich befinde mich im Stammverzeichnis und möchte nur die Liste des Verzeichnisses etc: Wir schreiben,
Ergebnis bekommen wir,
Ein anderes Beispiel,
Wir können auch schreiben:
wir bekommen,
quelle