Ich weiß, dass dies als Linux markiert ist, aber dies ist erwähnenswert: Der Pfad ist für andere * nix-Varianten erforderlich, die nicht Linux sind. Unter Linux ist der Pfad optional, wenn Sie dot verwenden möchten.
IslandCow
4
@Seatter "foo *" weist find an, nach allen Dateien zu suchen, die mit "foo" beginnen. Es ist nur sein Beispiel. Sie können "gpio *" verwenden, um alle Dateien zu finden, deren Namen mit gpio beginnen, oder einfach "gpio1", um alle Dateien mit dem Namen gpio1 zu finden.
schumacher574
29
Beachten Sie, dass das "foo *" in Anführungszeichen steht, damit die Shell es nicht erweitert, bevor Sie es übergeben, um es zu finden. Wenn Sie nur getan haben find . foo*, foo*würde das erweitert und dann übergeben, um zu finden.
grinch
33
Hervorzuheben ist, dass " "dies für die rekursive Suche sehr wichtig ist.
WesternGun
3
Ebenfalls nützlich: Wenn Sie nicht über Verzeichnisse benachrichtigt werden möchten, für die Sie keine Berechtigung haben (oder andere Fehler), können Sie dies tunfind . -name "foo*" 2>/dev/null
Jobbo
221
Piping Find in Grep ist oft bequemer; Sie erhalten die volle Leistung regulärer Ausdrücke für den beliebigen Platzhalterabgleich.
So finden Sie beispielsweise alle Dateien mit der Zeichenfolge "foo" ohne Berücksichtigung der Groß- und Kleinschreibung im Dateinamen:
findhat auch die -iname, -regexund -iregexFlaggen für Groß- und Kleinschreibung Wildcard, regex und Groß- und Kleinschreibung Regex Matching, um so kochend grepist nicht erforderlich.
Iobender
7
Ich denke nicht, dass es darum geht, unnötig zu sein, sondern bequemer zu sein.
Elijah Lynn
1
Wenn Sie jedoch an grep -v weiterleiten, können Sie einfache Zeichenfolgen oder reguläre Ausdrücke verwenden, um nicht gewünschte Einträge zu entfernen.
door_number_three
3
@iobender - Leider kann ich Ihnen aus Erfahrung sagen, dass nicht alle Systeme mit einem findBefehl ausgestattet sind, der diese Optionen unterstützt. Manchmal grepwird die einzige Option.
Herr Llama
150
find findet alle Dateien, die einem Muster entsprechen:
In einigen Fällen habe ich den Parameter -L benötigt, um symbolische Verzeichnisverknüpfungen zu verarbeiten. Standardmäßig werden symbolische Links ignoriert. In diesen Fällen war es ziemlich verwirrend, da ich das Verzeichnis in ein Unterverzeichnis ändern und sehen würde, dass die Datei mit dem Muster übereinstimmt, aber find den Dateinamen nicht zurückgeben würde. Die Verwendung von -L löst dieses Problem. Die symbolischen Verknüpfungsoptionen für find sind -P -L -H
L-Schalter ist sehr hilfreich. Oft hat der Benutzer keine Ahnung von zugrunde liegenden Verzeichnissen, unabhängig davon, ob es sich um Softlinks oder normale Verzeichnisse handelt. Im Zweifelsfall ist es also immer gut, die Option L zu verwenden. Zumindest hat es mir immer geholfen.
Zum ersten Mal seit fast 9 Jahren habe ich ein GIF auf SO gesehen. Gut gemacht!
Joshua Pinter
1
Diese Leistungsergebnisse sehen sehr vielversprechend aus. Sie könnten erwägen, fd zum
Selbstbrauen
off topic: Mit welchem Tool haben Sie eine SVG-Datei für die Demo erstellt?
Aprodan
2
@aprodan Das Demo-Image wurde von GitHub kopiert, aber ich glaube, sie verwenden es asciinemaund dann in das GIF-Format konvertiert, aber ich bin mir nicht sicher.
Kenorb
1
Eigentlich ist es das SVG-Format, kann also wahrscheinlich asciicast2vectorverwendet werden.
Kenorb
27
find <directory_path>-type f -name "<wildcard-match>"
In der Platzhalterübereinstimmung können Sie die Zeichenfolge angeben, mit der Sie übereinstimmen möchten, z. B. * .c (für alle c-Dateien).
Ihre Antwort ist hier die erste, die richtig ist, da nur Dateien wie angegeben durchsucht werden. Die anderen, die keinen Typ angeben, geben Verzeichnisse zurück.
Wilsotc
Wenn Sie nach einem Verzeichnis suchen möchten, könnte "-type f" in "-type d" geändert werden
XYZ_Linux
11
Sie können verwenden:
# find . -type f -name 'text_for_search'
Wenn Sie REGX verwenden möchten, verwenden Sie -iname
Die Standardmethode für die Suche nach rekursiven Dateien ist in den meisten Fällen verfügbar
find .-name "filepattern"
Es beginnt mit dem rekursiven Durchlaufen von Dateinamen oder Mustern in dem aktuellen Verzeichnis, in dem Sie sich befinden. Mit dem Befehl find können Sie Platzhalter und verschiedene Schalter verwenden, um die vollständige Liste der Optionen anzuzeigen
man find
oder wenn auf Ihrem System keine Manpages verfügbar sind
find --help
Es gibt jedoch modernere und schnellere Tools als die, die Ihr gesamtes Dateisystem durchlaufen und Ihre Dateien indizieren. Ein solches häufiges Tool ist das Suchen oder Verschieben / mlocate. Sie sollten das Handbuch Ihres Betriebssystems überprüfen, wie es installiert wird, und sobald es installiert ist installiert muss es die Datenbank initiieren, wenn das Installationsskript es nicht für Sie erledigt, kann es manuell durch Eingabe erfolgen
sudo updatedb
Und um damit nach einem bestimmten Dateityp zu suchen
locate filename
Um im aktuellen Verzeichnis nach Dateinamen oder Mustern zu suchen, können Sie Folgendes eingeben:
pwd | xargs -n 1-I {} locate "filepattern"
Es durchsucht die Dateidatenbank und druckt schnell Pfadnamen aus, die dem von Ihnen eingegebenen Muster entsprechen. Geben Sie Folgendes ein, um die vollständige Liste der Suchoptionen anzuzeigen:
locate --help oderman locate
Darüber hinaus können Sie locate so konfigurieren, dass die Datenbank zu geplanten Zeiten über einen Cron-Job aktualisiert wird. So sieht ein Beispiel für Cron aus, das die Datenbank um 1 Uhr morgens aktualisiert:
01*** updatedb
Diese Cron-Jobs müssen von root konfiguriert werden, da updateb Root-Berechtigungen benötigt, um das gesamte Dateisystem zu durchlaufen.
Ich bin überrascht zu sehen, dass die Lokalisierung nicht stark genutzt wird, wenn wir rekursiv vorgehen sollen.
Ich würde zuerst "$ PWD" suchen, um die Liste der Dateien im aktuellen Ordner von Interesse abzurufen, und dann nach Belieben Greps auf ihnen ausführen.
locate "$PWD"| grep -P <pattern>
Dies setzt natürlich voraus, dass die Aktualisierung abgeschlossen ist und der Index regelmäßig aktualisiert wird. Dies ist eine viel schnellere Methode, um Dateien zu finden, als eine Suche auszuführen und sie zu bitten, den Baum hinunterzugehen. Der Vollständigkeit halber erwähnen. Nichts gegen die Verwendung von find, wenn der Baum nicht sehr schwer ist.
locate "$PWD*.mp4" Nur daran zu erinnern , dass Sie in der Lage sein kann , die überspringengrep
Jefferey Cave
5
Der folgende Befehl hilft bei der Suche nach Dateien
1) Unabhängig vom Fall
2) Ergebnis Ausschließen von Ordnern ohne Berechtigung
3) Suchen vom Stammverzeichnis oder vom gewünschten Pfad. Ändern Sie / mit dem Pfad, den Sie bevorzugen.
Warum um alles in der Welt benutzt du dafür grep? find / -iname '*C*.xml' 2>/dev/null
Leiten Sie
3
Wenn Sie eine spezielle Datei mit Platzhalter durchsuchen möchten, können Sie folgenden Code verwenden:
find .-type f -name "*.conf"
Angenommen, Sie möchten alle .conf-Dateien von hier aus durchsuchen:
.bedeutet, dass die Suche von hier aus gestartet wurde (aktueller Ort) -typebedeutet die Art des Suchelements, bei dem es sich um die Datei (f) handelt. -namebedeutet, dass Sie Dateien mit * .conf- Namen suchen möchten .
find . foo*
,foo*
würde das erweitert und dann übergeben, um zu finden." "
dies für die rekursive Suche sehr wichtig ist.find . -name "foo*" 2>/dev/null
Piping Find in Grep ist oft bequemer; Sie erhalten die volle Leistung regulärer Ausdrücke für den beliebigen Platzhalterabgleich.
So finden Sie beispielsweise alle Dateien mit der Zeichenfolge "foo" ohne Berücksichtigung der Groß- und Kleinschreibung im Dateinamen:
quelle
find
hat auch die-iname
,-regex
und-iregex
Flaggen für Groß- und Kleinschreibung Wildcard, regex und Groß- und Kleinschreibung Regex Matching, um so kochendgrep
ist nicht erforderlich.find
Befehl ausgestattet sind, der diese Optionen unterstützt. Manchmalgrep
wird die einzige Option.find
findet alle Dateien, die einem Muster entsprechen:Wenn Sie jedoch ein Bild möchten:
Hoffe das hilft!
quelle
brew install tree
für Mac OSX-Benutzer ohneapt-get
InstallationIn einigen Fällen habe ich den Parameter -L benötigt, um symbolische Verzeichnisverknüpfungen zu verarbeiten. Standardmäßig werden symbolische Links ignoriert. In diesen Fällen war es ziemlich verwirrend, da ich das Verzeichnis in ein Unterverzeichnis ändern und sehen würde, dass die Datei mit dem Muster übereinstimmt, aber find den Dateinamen nicht zurückgeben würde. Die Verwendung von -L löst dieses Problem. Die symbolischen Verknüpfungsoptionen für find sind -P -L -H
quelle
Wenn Ihre Shell eine neue Globbing-Option unterstützt (kann durch :) aktiviert werden
shopt -s globstar
, können Sie Folgendes verwenden:um Dateien oder Ordner rekursiv zu finden. Dies wird von Bash 4, zsh und ähnlichen Shells unterstützt.
Persönlich habe ich diese Shell-Funktion definiert:
Hinweis: Die obige Zeile kann direkt in die Shell eingefügt oder der
~/.bashrc
Datei Ihres Benutzers hinzugefügt werden.Dann kann ich nach Dateien suchen, indem ich Folgendes eingebe:
Alternativ können Sie ein
fd
Dienstprogramm mit einer einfachen Syntax verwenden, zfd pattern
.quelle
shopt -s globstar
Befehl aktivieren müssen . Dies wird in Bash-, zsh- und ähnlichen Shells unterstützt.bash-3.2$ shopt -s globstar
gibtbash: shopt: globstar: invalid shell option name
fd
Wenn
find
es zu langsam ist, versuchen Sie es mit demfd
Dienstprogramm - eine einfache und schnelle Alternative zufind
Rust.Syntax:
Demo:
Homepage: https://github.com/sharkdp/fd
quelle
asciinema
und dann in das GIF-Format konvertiert, aber ich bin mir nicht sicher.asciicast2vector
verwendet werden.In der Platzhalterübereinstimmung können Sie die Zeichenfolge angeben, mit der Sie übereinstimmen möchten, z. B. * .c (für alle c-Dateien).
quelle
Sie können verwenden:
Wenn Sie REGX verwenden möchten, verwenden Sie
-iname
quelle
Der folgende Befehl listet alle Dateien mit dem genauen Namen "Muster" (zum Beispiel) in den aktuellen und seinen Unterordnern auf.
find ./ -name "pattern"
quelle
Die Standardmethode für die Suche nach rekursiven Dateien ist in den meisten Fällen verfügbar
Es beginnt mit dem rekursiven Durchlaufen von Dateinamen oder Mustern in dem aktuellen Verzeichnis, in dem Sie sich befinden. Mit dem Befehl find können Sie Platzhalter und verschiedene Schalter verwenden, um die vollständige Liste der Optionen anzuzeigen
oder wenn auf Ihrem System keine Manpages verfügbar sind
Es gibt jedoch modernere und schnellere Tools als die, die Ihr gesamtes Dateisystem durchlaufen und Ihre Dateien indizieren. Ein solches häufiges Tool ist das Suchen oder Verschieben / mlocate. Sie sollten das Handbuch Ihres Betriebssystems überprüfen, wie es installiert wird, und sobald es installiert ist installiert muss es die Datenbank initiieren, wenn das Installationsskript es nicht für Sie erledigt, kann es manuell durch Eingabe erfolgen
Und um damit nach einem bestimmten Dateityp zu suchen
Um im aktuellen Verzeichnis nach Dateinamen oder Mustern zu suchen, können Sie Folgendes eingeben:
Es durchsucht die Dateidatenbank und druckt schnell Pfadnamen aus, die dem von Ihnen eingegebenen Muster entsprechen. Geben Sie Folgendes ein, um die vollständige Liste der Suchoptionen anzuzeigen:
locate --help
oderman locate
Darüber hinaus können Sie locate so konfigurieren, dass die Datenbank zu geplanten Zeiten über einen Cron-Job aktualisiert wird. So sieht ein Beispiel für Cron aus, das die Datenbank um 1 Uhr morgens aktualisiert:
Diese Cron-Jobs müssen von root konfiguriert werden, da updateb Root-Berechtigungen benötigt, um das gesamte Dateisystem zu durchlaufen.
quelle
für die Dateisuche
find / -xdev -name settings.xml
-> ganzer Computerfind ./ -xdev -name settings.xml
-> aktuelles Verzeichnis & sein Unterverzeichnisfür Dateien mit Erweiterungstyp
quelle
Ich bin überrascht zu sehen, dass die Lokalisierung nicht stark genutzt wird, wenn wir rekursiv vorgehen sollen.
Ich würde zuerst "$ PWD" suchen, um die Liste der Dateien im aktuellen Ordner von Interesse abzurufen, und dann nach Belieben Greps auf ihnen ausführen.
Dies setzt natürlich voraus, dass die Aktualisierung abgeschlossen ist und der Index regelmäßig aktualisiert wird. Dies ist eine viel schnellere Methode, um Dateien zu finden, als eine Suche auszuführen und sie zu bitten, den Baum hinunterzugehen. Der Vollständigkeit halber erwähnen. Nichts gegen die Verwendung von find, wenn der Baum nicht sehr schwer ist.
quelle
locate "$PWD*.mp4"
Nur daran zu erinnern , dass Sie in der Lage sein kann , die überspringengrep
Der folgende Befehl hilft bei der Suche nach Dateien
1) Unabhängig vom Fall
2) Ergebnis Ausschließen von Ordnern ohne Berechtigung
3) Suchen vom Stammverzeichnis oder vom gewünschten Pfad. Ändern Sie / mit dem Pfad, den Sie bevorzugen.
Syntax:
find -iname '' 2> & 1 | grep -v Beispiel "Berechtigung verweigert"
quelle
find / -iname '*C*.xml' 2>/dev/null
Wenn Sie eine spezielle Datei mit Platzhalter durchsuchen möchten, können Sie folgenden Code verwenden:
Angenommen, Sie möchten alle .conf-Dateien von hier aus durchsuchen:
.
bedeutet, dass die Suche von hier aus gestartet wurde (aktueller Ort)-type
bedeutet die Art des Suchelements, bei dem es sich um die Datei (f) handelt.-name
bedeutet, dass Sie Dateien mit * .conf- Namen suchen möchten .quelle
Dadurch werden alle zugehörigen Dateien in aktuellen und Unterverzeichnissen durchsucht und ihre Zeilenanzahl separat sowie vollständig berechnet:
quelle
Verwenden
Erläuterung
find
erfolgt die Rekursion.-o
steht für-or
. Oben bedeutet also, nach diesem oder diesem Platzhalter zu suchen. Wenn Sie nur ein Muster haben, brauchen Sie es nicht-o
.quelle