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
?
command-line
files
search
find
srk_cb
quelle
quelle
Antworten:
Suchen von Dateien mit
bat
AnywhereUm alle Dateien zu finden,
/path/to/folder
deren Namen enthaltenbat
, können Sie Folgendes verwenden: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 zufind
. Dannfind
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: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 .)Erweitern oder Eingrenzen Ihrer Suche basierend auf dem Namen
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:Ich habe festgestellt, dass alle Ihre Dateien auf enden
.c
. Wenn Sie nur solche Dateien finden möchten, verwenden Sie: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 übereinstimmenembattled.c
, können Sie Folgendes verwenden:-o
ist der Operator oder .Nur Dateien abgleichen
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 Siefind
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:
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 aktivfind
mit-L
Flagge,-xtype
auf einen symbolischen Link testet den Typ der Datei zu der Link verweist.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
.Detaillierte Ausgabe erhalten
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
: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 Lektüre
Weitere Informationen
find
und andere Möglichkeiten zum Suchen von Dateien finden Sie unter:find
Handbuchseite , die online oder überman find
ein Terminal aufgerufen werden kann.find
,locate
undxargs
Dienstprogramme.quelle
-xtype
Ratschlag; vielleichtls *bat*
und-maxdepth
/mindepth
sind auch erwähnenswert.ls
bereits, konzentrierte ich mich auf dem rekursive Fall mitfind
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
undfind
mit-maxdepth
) übereinstimmen . Vielleicht möchten Sie eine solche Antwort posten!Der einfachste Weg ist zu rennen
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
Führen Sie diesen Befehl aus, wenn Sie Ihrem Konto kürzlich neue Dateien hinzugefügt haben
quelle
updatetdb
updatedb
das manuell oder automatisch ausgeführt wurde),sudo updatedb
müsste zuerst ausgeführt werden, ja.bat
.find /
daslocate
Durchsuchen einer Datenbank, während die Regexfind
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:
Das
.
startet den Suchbefehl aus dem aktuellen Verzeichnis.Das
-name
stimmt mit der Zeichenfolge übereinbat
und unterscheidet zwischen Groß- und Kleinschreibung. (-iname
Ist Groß- und Kleinschreibung)Die
-type f
Suche nach Dateien.quelle
Wenn sich die Dateien im aktuellen Verzeichnis befinden, verwenden Sie:
Oder (um sie Zeile für Zeile zu haben):
Wenn Sie das System nach diesen Dateien durchsuchen möchten, verwenden Sie:
quelle
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:Oder
Das
*
bedeutet "ein beliebiges Zeichen", daher wird bei der Suche nach einembat
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 suchenquelle
-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
.z.B.:
von
man find
:quelle