find -exec não está funcionando corretamente, por quê?

0

Eu estou tentando listar todos os nomes de arquivos (o nome da base, não o caminho completo) abaixo do meu diretório pessoal usando find. Eu tentei fazer:

find ~/ -type f -exec echo $(basename "{}") ";"

No entanto, acabo tendo uma lista de caminhos completos, e não apenas dos nomes básicos, como eu gostaria. Eu agora uso echo , mas o ideal é que o resultado de $(basename "{}") seja o argumento de alguma outra função que eu queira escrever.

Por que a função de nome de base não é aplicada corretamente?

    
por lucacerone 06.02.2014 / 14:13

1 resposta

2

O shell está interpretando o $(...) antes de executar find . Se você quiser que o shell de busca execute-o, você precisará parar de substituí-lo. Nós podemos fazer isso da seguinte forma:

find ~/ -type f -exec sh -c 'echo $(basename "{}")' \;

A chave aqui são as aspas simples; Bash não vai tocar em nada dentro deles.

    
por Oli 06.02.2014 / 14:37