Eu acho que você tem apenas que ativar a opção bash globstar
, porque ela não está ativa por padrão no Ubuntu , como explicado a seguir.
A expressão /path/to/music/directory/{**/,}*
contém duas construções de expansão: possui uma expansão de chave e, em seguida, uma expansão de nome de caminho.
Expansão de órtese
A expansão de chave é melhor explicada com um exemplo:
$ printf '%s\n' before-{a,bb,1,22}-after
before-a-after
before-bb-after
before-1-after
before-22-after
(Eu usei, aqui e a seguir, o comando printf '%s\n' item1 item2 etc..
que é como echo
, mas imprime cada elemento em uma nova linha)
Você vê que cada elemento separado por vírgula nas chaves resulta em um elemento expandido.
O exemplo original, contendo entre chaves os elementos **/
e um elemento vazio, expande para
$ printf '%s\n' /path/to/music/directory/{**/,}*
/path/to/music/directory/**/*
/path/to/music/directory/*
Globstar
Mude agora para o bash glob **
, que é mencionado duas vezes no Página de manual do bash , ambos em relação à opção de shell globstar
, e o significado é o seguinte:
Esta opção de shell não está ativa por padrão no Ubuntu:
$ shopt globstar
globstar off
Você pode ativá-lo com
shopt -s globstar
(use shopt -u globstar
para desativá-lo).
Se tivermos a seguinte estrutura de diretório:
$ find first/ | sort
first/
first/aaa
first/second
first/second/bbb01
first/second/bbb02
first/second/third
first/second/third/ccc1
first/second/third/ccc2
first/second/third/ccc3
poderíamos ter as seguintes expansões:
$ printf '%s\n' first/**/a*
first/aaa
$ printf '%s\n' first/**/b*
first/second/bbb01
first/second/bbb02
$ printf '%s\n' first/**/c*
first/second/third/ccc1
first/second/third/ccc2
first/second/third/ccc3
para que você possa ver que **
é capaz de se expandir para mais de um elemento de nome de caminho.