Eu tenho esta estrutura de diretórios:
~/tmp/globstar ɀ find dir -type f
dir/file.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
e, com a globstar
opção ativada no Bash, posso dizer:
~/tmp/globstar ɀ ls -1 dir/**/*.ext
dir/subdir1/file.ext
dir/subdir2/file.ext
Minha pergunta é: por que é dir/file.ext
excluído desta lista?
O manual do Bash diz isso sobre globstar
:
Se definido, o padrão '**' usado em um contexto de expansão de nome de arquivo corresponderá a todos os arquivos e zero ou mais diretórios e subdiretórios. Se o padrão for seguido por um '/', apenas diretórios e subdiretórios corresponderão.
" Zero " neste parágrafo me deixa com a impressão de que dir/file.ext
deveria ter sido incluída; a menos que eu esteja perdendo alguma coisa.
ɀ
?unicode ɀ
ou Wikipediaɀ
é apenas um caractere usado aqui para distinguir prompt. Alguns usuários preferem o personagem£
ou em€
vez de$
:). Originalmente,ɀ
um caractere 'z' criado para uma notação especial de idioma Africano :-)Respostas:
Eu acho que isso se refere apenas ao nível do subdiretório.
**
sem/
fósforostodos os arquivos e diretórios
zero ou mais subdiretórios
Mas isso não desaparece completamente.
**/
significa que nenhum arquivo no diretório de nível superior ao qual**
se aplica é correspondido.Você precisa
dir/*.ext dir/**/*.ext
.fonte
Isso funciona como o esperado nessas versões do Bash, conforme fornecido com as distribuições listadas:
De fato, as versões listadas acima são tudo o que eu testei. Em outras palavras, não encontrei uma versão 4 do Bash onde ela não funciona. A opção
globstar
foi adicionada no Bash 4.0, consulte ALTERAÇÕES . Nas versões mais antigas, o comandoshopt -s globstar
deve retornar um erro.Testes
1.
dir/**/*.ext
jogosdir/file.ext
:2.
**/*.ext
jogosfile.ext
:Preparando o ambiente para reproduzir os testes acima:
fonte
shopt -s globstar
.Parece-me que você desligou o globstar. Pode ser ativado assim:
Não só não corresponderá a zero subdiretórios, mas também não corresponderá a dois subdiretórios:
Com o globstar desativado, ** acaba se comportando como *, obtendo
dir/**/*.ext
o mesmo resultado quedir/*/*.ext
o que às vezes me faz pensar que a globstar está ligada
verifique sua configuração atual da globstar assim:
fonte
shopt globstar
.