Me gustaría escribir algo como esto:
$ ls **.py
para obtener todos los nombres de archivo .py, recorriendo recursivamente una jerarquía de directorios.
Incluso si hay archivos .py para encontrar, el shell (bash) da este resultado:
ls: cannot access **.py: No such file or directory
¿Alguna forma de hacer lo que quiero?
EDITAR: Me gustaría especificar que no estoy interesado en el caso específico de ls, pero la pregunta es sobre la sintaxis global.

nullglobnullglob, recomiendo leer las siguientes advertencias .wc -l {**,.}/*.pyfunciona bien** no hace más que un solo *, ambos operan en el directorio actual
fuente
findsi no tiene bash 4. Ejemplos:yourcommand `find . -name '*.py'`(tenga en cuenta los backticks);find . -name '*.py' -exec yourcommand {} \;.Desde Bash 4 (que también incluye zsh) se ha agregado una nueva opción global (
globstar) que trata el patrón de manera**diferente cuando se configura.Está haciendo coincidir el patrón comodín y devolviendo los nombres de archivo y directorio que coinciden reemplazando el patrón comodín en el comando con los elementos coincidentes.
Normalmente, cuando lo usa
**, funciona de manera similar*, pero recurre a todos los directorios de forma recursiva (como un bucle).Para ver si está habilitado, verifíquelo mediante
shopt globstar(en scripting, useshopt -q globstar).El ejemplo
**.pyfuncionaría solo para el directorio actual, ya que no devuelve una lista de directorios que pueden ser recurrentes, por lo que es necesario usar comodines de nivel de directorio múltiple**/*.py, para que pueda profundizar.Busque en SO pocas pruebas de sintaxis que hice para encontrar todos los archivos de forma recursiva.
fuente