Por que o comando não substitui o trabalho dentro de 'find'?

2

No bash, se você tentar executar a função basename dentro da opção -exec de find , ela não parece fazer nada. Como exemplo:

find . -name "*pdf" -exec  echo $(basename {}) \;

produz o nome do arquivo incluindo o diretório, ou seja, o mesmo que o resultado de

find . -name "*pdf" -exec  echo {} \;

Por que isso acontece?

    
por JeffDror 08.06.2017 / 20:12

1 resposta

3

O fragmento $(basename {}) é analisado pelo seu shell antes de find ser executado. O resultado é {} . É por isso que os dois comandos são os mesmos.

Para que funcione como você queria, você pode gerar outro shell que manipulará $() sozinho. Citar com '' impede que o shell externo processe $() :

find -name "*pdf" -exec sh -c 'echo $(basename {})' \;
    
por 08.06.2017 / 20:20