linux - tutorial - unix shell




Wie kann ich rekursiv alle Dateien in aktuellen und Unterordnern basierend auf dem Platzhalter suchen? (7)

Wie kann ich rekursiv alle Dateien in aktuellen und Unterordnern basierend auf dem Platzhalter suchen?


Piping finden in Grep ist oft bequemer; Es bietet Ihnen die volle Leistung von regulären Ausdrücken für beliebige Platzhalter.

Um zum Beispiel alle Dateien mit der Groß- / Kleinschreibung "foo" im Dateinamen zu finden:

~$ find . -print | grep -i foo

Sie können verwenden:

# find . -type f  -name 'text_for_search'

Wenn Sie REGX verwenden möchten, verwenden Sie -iname

# find . -type f  -iname 'text_for_search'

Verwenden find dafür:

find . -name "foo*"

find braucht einen Ausgangspunkt, und die . (Punkt) zeigt auf das aktuelle Verzeichnis.


Wenn shopt -s globstar Shell eine neue Globbing-Option unterstützt (aktivieren Sie sie durch: shopt -s globstar ), können Sie shopt -s globstar verwenden:

echo **/*foo*

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:

f() { find . -name "*$1*"; }

Hinweis: Die ~/.bashrc Zeile kann direkt in die Shell eingefügt oder in die ~/.bashrc Datei Ihres Benutzers ~/.bashrc werden.

Dann kann ich nach beliebigen Dateien suchen, indem ich Folgendes eingabe:

f some_name

für die Dateisuche
find / -xdev -name settings.xml -> gesamter Computer
find ./ -xdev -name settings.xml -> aktuelles Verzeichnis und dessen Unterverzeichnis

für Dateien mit Erweiterungstyp

find . -type f -name "*.iso"

find findet alle Dateien, die mit einem Muster übereinstimmen:

find . -name "*foo"

Wenn Sie jedoch ein Bild möchten:

tree -P "*foo"

Hoffe das hilft!


find -L . -name "foo*"

In einigen Fällen brauchte ich den Parameter -L, 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 änderte und die Datei mit dem Muster übereinstimmte, aber find würde den Dateinamen nicht zurückgeben. Die Verwendung von -L löst dieses Problem. Die symbolischen Verbindungsoptionen für die Suche sind -P-L -H





shell