Angenommen, es gibt Dateien mit Namen:
batman.c
debate.c
cricketbat.c
Welchen Befehl und wie soll ich ihn verwenden, um alle diese Dateien mithilfe des Suchtags aufzulisten bat
?
Angenommen, es gibt Dateien mit Namen:
batman.c
debate.c
cricketbat.c
Welchen Befehl und wie soll ich ihn verwenden, um alle diese Dateien mithilfe des Suchtags aufzulisten bat
?
Antworten:
bat
AnywhereUm alle Dateien zu finden, /path/to/folder
deren Namen enthalten bat
, können Sie Folgendes verwenden:
find /path/to/folder -name '*bat*'
Ich habe zitierte das Suchmuster , *bat*
weil, wenn die Anführungszeichen weggelassen wurden und Dateien entsprechen *bat*
im aktuellen Verzeichnis, wird die Shell erweitert *bat*
in eine Liste von ihnen und passiert , dass zu find
. Dann find
würde es nicht richtig funktionieren. ( \*bat\*
und "*bat*"
auch arbeiten.)
Um in dem Ordner zu suchen, in dem Sie sich gerade befinden (z. B. den Sie bearbeitet haben cd
), verwenden Sie .
wie gewohnt:
find . -name '*bat*'
Verwenden Sie,/
um Ihren gesamten Computer zu durchsuchen . Verwenden Sie ~
oder den vollständigen Namen Ihres Basisverzeichnisses, um in Ihrem Basisverzeichnis zu suchen . ( Die Shell wird~
auf den vollständig qualifizierten Pfad Ihres Basisverzeichnisses erweitert .)
Wenn Sie case-insensitiv suchen wollen, so Dateien enthält BAT
, bAt
und so weiter angepasst sind, verwenden Sie den -iname
Test anstelle des -name
Tests:
find /path/to/folder -iname '*bat*'
Ich habe festgestellt, dass alle Ihre Dateien auf enden .c
. Wenn Sie nur solche Dateien finden möchten, verwenden Sie:
find /path/to/folder -name '*bat*.c'
Mir ist aufgefallen, dass alle Dateinamen bat
entweder ganz am Anfang oder ganz am Ende des Teils vor dem .c
Suffix stehen. Wenn Sie vermeiden möchten, dass Dateien übereinstimmen embattled.c
, können Sie Folgendes verwenden:
find /path/to/folder -name '*bat.c' -o -name 'bat*.c'
-o
ist der Operator oder .
Verwenden Sie diese Option, um nur normale Dateien und keine Ordner, symbolischen Links und speziellen Geräteknoten zu finden -type f
. Dies wird häufig empfohlen und ist manchmal durchaus angemessen, aber häufig nicht das, was Sie wirklich wollen , insbesondere, wenn Sie find
die Ausgabe selbst überprüfen möchten . Wenn Sie einen symbolischen Link hätten , der Ihrer Suche entspricht, möchten Sie nichts darüber wissen?
Wenn Sie sowohl reguläre Dateien als auch symbolische Links suchen möchten, können Sie Folgendes verwenden:
find /path/to/folder -name '*bat*' \( -type f -o -type l \)
Dabei werden der -o
Operator und auch Klammern für die Gruppierung verwendet (diese müssen in Anführungszeichen gesetzt werden, damit die Shell sie nicht speziell behandelt; andernfalls wird ein Syntaxfehler angezeigt).
Angenommen, Sie möchten nur symbolische Links sehen, die letztendlich auf eine reguläre Datei verweisen (und keine symbolischen Links zu Verzeichnissen, Geräteknoten usw.). Das ist eigentlich noch einfacher: Verwenden Sie -xtype
statt -type
. Sofern Sie nicht aktiv find
mit -L
Flagge, -xtype
auf einen symbolischen Link testet den Typ der Datei zu der Link verweist.
find /path/to/folder -name '*bat*' -xtype f
Wenn Sie einen Symlink zu einem anderen Symlink zu einer Datei haben, -xtype f
wird dieser zugeordnet, obwohl das direkte Ziel ein anderer Symlink anstelle einer regulären Datei ist. Das ist fast immer was Sie wollen.
Oft denken die Leute, dass sie wollen -type f
, aber wirklich wollen sie -xtype f
.
find
Die Standardaktion von ist, wenn Sie keine angeben -print
. Alle oben angegebenen Befehle entsprechen sich selbst und werden -print
am Ende angeheftet.
find
wird häufig verwendet, um Befehle basierend auf den gefundenen Dateien auszuführen - häufig Befehle, die Änderungen vornehmen. Daneben gibt es aber auch andere Aktionen, deren Zweck es ist, Ergebnisse anzuzeigen -print
. Von besonderem Interesse ist -ls
:
find /path/to/folder -name '*bat*' -ls
Auf diese Weise erhalten Sie detaillierte Informationen zu jeder Datei in einem mehrspaltigen Format, ähnlich dem, was Sie beim Ausführen sehen würden (obwohl dies nicht ganz dasselbe ist) .ls file
Weitere Informationen find
und andere Möglichkeiten zum Suchen von Dateien finden Sie unter:
find
Handbuchseite , die online oder über man find
ein Terminal aufgerufen werden kann.find
, locate
und xargs
Dienstprogramme.-xtype
Ratschlag; vielleicht ls *bat*
und -maxdepth
/ mindepth
sind auch erwähnenswert.
ls
bereits, konzentrierte ich mich auf dem rekursive Fall mit find
hier. Natürlich wäre auch eine ausführliche Antwort nützlich , die eine nicht (oder weniger) rekursive Auflistung von Dateinamen abdeckt, die mit einem Muster ( ls
und find
mit -maxdepth
) übereinstimmen . Vielleicht möchten Sie eine solche Antwort posten!
Der einfachste Weg ist zu rennen
locate bat
Auf diese Weise können Sie den gesamten Computer nach Dateien durchsuchen, deren Dateiname "bat" enthält
Um die Liste der Dateien auf Ihrem PC zu aktualisieren, führen Sie
updatedb
Führen Sie diesen Befehl aus, wenn Sie Ihrem Konto kürzlich neue Dateien hinzugefügt haben
updatetdb
updatedb
das manuell oder automatisch ausgeführt wurde), sudo updatedb
müsste zuerst ausgeführt werden, ja.
bat
.
find /
das locate
Durchsuchen einer Datenbank, während die Regex find
rekursiv aufgelistet /
und dann abgeglichen wird.
Öffnen Sie das Terminal und wechseln Sie in das Verzeichnis, in dem Sie suchen möchten. Führen Sie dann den folgenden Befehl aus:
find . -name "*bat*" -type f
Das .
startet den Suchbefehl aus dem aktuellen Verzeichnis.
Das -name
stimmt mit der Zeichenfolge überein bat
und unterscheidet zwischen Groß- und Kleinschreibung. ( -iname
Ist Groß- und Kleinschreibung)
Die -type f
Suche nach Dateien.
Wenn sich die Dateien im aktuellen Verzeichnis befinden, verwenden Sie:
$ ls *bat*
batgirl.c batman.c batwoman.c cricketbat.c
Oder (um sie Zeile für Zeile zu haben):
$ ls -1 *bat*
batgirl.c
batman.c
batwoman.c
cricketbat.c
Wenn Sie das System nach diesen Dateien durchsuchen möchten, verwenden Sie:
$ find / -name "*bat*"
/path/to/cricketbat.c
/path/to/batgirl.c
/path/to/batwoman.c
/path/to/batman.c
Sie möchten den find
Befehl mit der -iname
Option für den Abgleich von Dateinamen verwenden , bei dem die Groß- und Kleinschreibung nicht berücksichtigt wird, oder mit der Option für den Abgleich von Dateinamen , bei dem die Groß- und Kleinschreibung beachtet wird -name
. In beiden Fällen können Sie Platzhalter verwenden. Um alle Dateinamen zu finden, die "bat" enthalten, verwenden Sie:
find / -iname '*bat*'
Oder
find / -name '*bat*'
Das *
bedeutet "ein beliebiges Zeichen", daher wird bei der Suche nach einem bat
beliebigen Zeichen gesucht , auch nach keinem, davor oder danach. Die /
Suchvorgänge aus dem Stammverzeichnis können .
rekursiv ausgeführt werden. Dabei wird entweder rekursiv aus dem aktuellen Verzeichnis oder dem absoluten Pfad gesucht, von dem aus gesucht werden soll. Schauen Sie sich an, wie Sie mit Regex in Linux-Shell-Skripten nach Dateien suchen
-type f
, was mehr als nur das Ausschließen von Verzeichnissen bedeutet und oft nicht das ist , was Benutzer wirklich wollen .
Benutz das gute alte find
.
find <path_for_search> -type f -iname "*bat*"
z.B.:
% find . -type f -iname "*bat*"
./batgirl.c
./batwoman.c
./cricketbat.c
./batman.c
von man find
:
-type c
File is of type c:
[..]
d directory
[..]
f regular file
[..]
-iname pattern
Like -name, but the match is case insensitive.