Por que o 'find' às vezes encontra meu arquivo, às vezes não [duplicado]

1

Aqui está minha árvore de diretórios (não mostrando todos os diretórios, arquivos, apenas o essencial):

a_root_dir/ (directory)
a_root_dir/dynamo/local/run.sh
a_root_dir/dynamo/local/run_local.sh

Agora, quando faço

> cd a_root_dir
> find . -name *.sh
./dynamo/local/run.sh
########### IT DOESN'T SHOW run_local.sh !!!!
> cd dynamo
> pwd
...../a_root_dir/dynamo
> find . -name *.sh
./local/run.sh
./local/run_local.sh
######## NOW IT FOUND IT

Como isso acontece?

Arquivos e diretórios e scripts são "usuais", não há nenhum link simbólico . Muito obrigado

    
por Thomas 24.11.2016 / 12:43

1 resposta

4

O problema é que seu asterisco é interpretado pelo shell ANTES de ser passado para find como argumento.

Ou seja. se você tiver um arquivo como script.sh no diretório de trabalho atual de onde você o encontrou, seu comando irá procurar like this:

#command you type:
find . -name *.sh
#command the shell creates:
find . -name script.sh

Então, no seu caso, é a primeira correspondência para *.sh em a_root_dir , conforme interpretado pelo shell, e seu comando é literalmente:

find . -name run.sh

O que você precisa fazer é usar aspas duras para suprimir o shell que expande o asterisco antes que find seja executado:

find . -name '*.sh'
    
por 24.11.2016 / 12:50