GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Rekursiver Glob?

Ich würde gerne so etwas schreiben:

$ ls **.py

Um alle .py-Dateinamen zu erhalten, durchlaufen Sie rekursiv eine Verzeichnishierarchie.

Selbst wenn .py-Dateien zu finden sind, gibt die Shell (bash) diese Ausgabe aus:

ls: cannot access **.py: No such file or directory

Irgendeine Möglichkeit zu tun, was ich will?

BEARBEITEN: Ich möchte darauf hinweisen, dass ich mich nicht für den speziellen Fall von ls interessiere , aber die Frage betrifft die Glob-Syntax.

Akzeptierte Antwort:

Um rekursive Globs in Bash zu erstellen, benötigen Sie den globstar Funktion ab Bash-Version 4 oder höher.

Aus der Bash-Manpage:

globstar
    If set, the pattern ** used in a pathname expansion context will
    match all files and zero or more directories and subdirectories.
    If the pattern is followed by a /, only directories and
    subdirectories match.

Für Ihr Beispielmuster:

shopt -s globstar
ls -d -- **/*.py

Linux
  1. Linux C Programming Tutorial Teil 18:Rekursive Funktionen

  2. Rekursives Umount nach Rbind-Mount?

  3. Erweiterung einer Shell-Variablen und Auswirkung von Glob und Split darauf?

  4. Rekursive Statistiken zu Dateitypen im Verzeichnis?

  5. Rekursives Mkdir?

Laden Sie rekursive Abhängigkeiten eines Pakets in Ubuntu herunter

So begrenzen Sie die Tiefe des „Baums“ für die rekursive Dateiauflistung

Verwalten Sie Verzeichnis- und Dateiberechtigungen mit chmod Recursive

wget rekursiv auf untergeordnete URL-Pfade beschränkt

Rekursive, nicht überschreibende Dateikopie?

Brauche ich wirklich rekursives chmod, um den Zugriff auf einen Ordner einzuschränken?