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:
batAnywhereUm alle Dateien zu finden, /path/to/folderderen 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 findwü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, bAtund so weiter angepasst sind, verwenden Sie den -inameTest anstelle des -nameTests:
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 batentweder ganz am Anfang oder ganz am Ende des Teils vor dem .cSuffix 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'
-oist 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 finddie 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 -oOperator 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 -xtypestatt -type. Sofern Sie nicht aktiv findmit -LFlagge, -xtypeauf 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 fwird 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.
findDie Standardaktion von ist, wenn Sie keine angeben -print. Alle oben angegebenen Befehle entsprechen sich selbst und werden -printam Ende angeheftet.
findwird 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 findund andere Möglichkeiten zum Suchen von Dateien finden Sie unter:
findHandbuchseite , die online oder über man findein Terminal aufgerufen werden kann.find, locateund xargsDienstprogramme.-xtypeRatschlag; vielleicht ls *bat*und -maxdepth/ mindepthsind auch erwähnenswert.
lsbereits, konzentrierte ich mich auf dem rekursive Fall mit findhier. 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 ( lsund findmit -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
updatedbdas manuell oder automatisch ausgeführt wurde), sudo updatedbmüsste zuerst ausgeführt werden, ja.
bat.
find /das locateDurchsuchen einer Datenbank, während die Regex findrekursiv 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 -namestimmt mit der Zeichenfolge überein batund unterscheidet zwischen Groß- und Kleinschreibung. ( -inameIst Groß- und Kleinschreibung)
Die -type fSuche 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 findBefehl mit der -inameOption 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 batbeliebigen 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.