GNU/Linux >> Tutoriels Linux >  >> Linux

Glob récursif ?

J'aimerais écrire quelque chose comme ceci :

$ ls **.py

afin d'obtenir tous les noms de fichiers .py, parcourir de manière récursive une hiérarchie de répertoires.

Même s'il y a des fichiers .py à trouver, le shell (bash) donne cette sortie :

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

Un moyen de faire ce que je veux ?

MODIF : Je précise que je ne suis pas intéressé par le cas particulier de ls , mais la question porte sur la syntaxe glob.

Réponse acceptée :

Pour faire des globs récursifs dans bash, vous avez besoin du globstar fonctionnalité de bash version 4 ou supérieure.

À partir de la page de manuel bash :

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.

Pour votre modèle d'exemple :

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

Linux
  1. Tutoriel de programmation Linux C Partie 18 :Fonctions récursives

  2. Statistiques récursives sur les types de fichiers dans le répertoire ?

  3. Mkdir récursif ?

  4. Construire des analyseurs de descente récursive :le guide définitif

  5. Glob insensible à la casse sur zsh/bash

Télécharger les dépendances récursives d'un paquet dans Ubuntu

Comment limiter la profondeur de «l'arborescence» pour la liste de fichiers récursifs

Expansion d'une variable Shell et effet de Glob et Split dessus ?

Tester la recherche et le remplacement Sed récursifs avant l'exécution ?

Gérer les autorisations de répertoire et de fichier avec chmod Recursive

grep récursif :exclure des répertoires spécifiques