Eu tenho uma estrutura de arquivo semelhante a esta
.
├── streaming
│  └── streaming - Copy
├── hw1
│  ├── concurrent-downloads
│  ├── cpu_multiprocessing.py
│  ├── cpu_synchronous.py
│  ├── cpu_threading.py
│  ├── io_asyncio.py
│  ├── io_multiprocessing.py
│  ├── io_synchronous.py
│  ├── io_threading.py
│  └── soluciones
└── hw2
└── iteradores.ipynb
Quando executo algum comando como ls cpu*
o do diretório de trabalho, recebo:
ls: cannot access 'cpu*': No such file or directory
(também, um comando como ls [c]*
mostra a mesma saÃda). Claro, quando eu o executo depois, cd hw1
mas para certos curingas como ls [[:lower:]
ele mostra uma saÃda de 2 nÃveis de recursão:
`streaming:
'streaming - Copy'
hw1:
concurrent-downloads cpu_synchronous.py io_asyncio.py io_synchronous.py soluciones
cpu_multiprocessing.py cpu_threading.py io_multiprocessing.py io_threading.py
hw2:
iteradores.ipynb`
Esse é um comportamento normal.
ls
não recurse e não avaliará o padrão glob. O shell está fazendo isso!Se você executar
ls
em um diretório, ele mostrará o conteúdo do diretório por padrão.Use
-d
para mostrar apenas os nomes dos diretórios, não seus conteúdos.Então,
ls [[:lower:]]*
não recurse. O shell irá corresponder e expandir os diretórios que começam com um caractere minúsculo els
mostrará seu conteúdo.Você pode usar
ls */cpu*
para localizarcpu*
todos os subdiretórios, mas isso também nãols
é recursivo, mas seu shell expande o primeiro*
para todos os subdiretórios.Como alternativa, você pode usar a
globstar
opção shell para obter recursão:ainda assim,
ls
não recursivamente, mas o shell sim.Para obter recursão fora do shell, use o
find
comando: