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