Como ativar o operador double star ** (globstar)? [duplicado]

1

Eu sei que existe um operador semelhante ao * , com a diferença de que ele funciona em todos os subdiretórios.

Suponha que você tenha uma estrutura de pastas:

.
├── bar
│   ├── foo
│   │   └── baz
│   │       └── hurz
│   │           └── lolz
│   │               └── hello.txt
│   └── poit.txt
└── fnord.txt

Então, ls com estrela única listaria:

Como isso se parece atualmente:

$ ls *.txt
fnord.txt

No entanto, agora espero que o operador de estrela dupla trabalhe nas subpastas, mas ainda não está completo. Eu sei que isso pode funcionar como eu tinha isso ativado em outra máquina ainda me esqueci como.

$ ls **/*.txt
bar/poit.txt

Eu esperava que a saída se parecesse com:

ls **/*.txt
bar/foo/baz/hurz/lolz/hello.txt  bar/poit.txt  fnord.txt

Como o operador ** é chamado e como posso ativá-lo corretamente?

    
por k0pernikus 28.02.2018 / 18:00

1 resposta

3

Você está procurando a opção de shell globstar que foi introduzida na versão 4 do bash.

Se você não tiver certeza de qual versão está sendo executada, pode testá-la por meio de:

$ echo $BASH_VERSION
4.4.12(1)-release

Verifique se está ativado por:

$ shopt globstar

O valor padrão é off . Se você quiser usá-lo, você tem que habilitá-lo:

$ shopt -s globstar

Em seguida, funcionará como esperado. Você pode querer adicionar isso ao seu .bashrc para que ele esteja sempre ativado em novos shells.

Para desativá-lo:

$ shopt -u globstar

Veja help shopt para detalhes.

    
por k0pernikus 28.02.2018 / 18:00