Glob para corresponder aos subdiretórios

1

Espero que eu não seja o único que encontra globs para o mau comportamento. Se você tivesse me perguntado uma hora atrás, eu estaria 99% confiante de que

test/src/**/*.js

corresponderia a todos os arquivos .js em src e todos os subdiretórios de src..but eu estou no MacOS e usando o Bash 3.2.57, e não está combinando mais de um arquivo.

Alguém sabe o que pode estar errado?

    
por Alexander Mills 18.07.2017 / 08:32

2 respostas

3

O Bash 3.2 não suporta globstar:

$ shopt -s globstar
bash: shopt: globstar: invalid shell option name

Sem shopt -s globstar , ** é apenas uma planilha não recursiva simples.

A página NEWS diz:

This is a terse description of the new features added to bash-4.0 since the release of bash-3.2. As always, the manual page (doc/bash.1) is the place to look for complete descriptions.

  1. New Features in Bash

    [...]

    w. There is a new shell option: globstar. When enabled, the globbing code treats ** specially -- it matches all directories (and files within them, when appropriate) recursively.

Você precisará atualizar seu bash para pelo menos 4.0 (provavelmente instalar um do homebrew) ou usar find .

    
por 18.07.2017 / 08:42
1

Você pode usar find para fazer isso. Por exemplo:

find ./test/src -type f -name \*.js

Se você deseja limitar a apenas dois diretórios:

find ./test/src -maxdepth 2 -type f -name \*.js
    
por 18.07.2017 / 08:54