Se por "extrair e remover suas extensões" você quiser renomear o nome, você conseguirá isso.
find f1 -path "*/aaa/*" -type f -exec bash -c 'mv -i -- "$0" "${0%.*}"' {} \;
Ou simplesmente imprimir os arquivos sem sua extensão:
find f1 -path "*/aaa/*" -type f -exec bash -c 'echo "${0%.*}"' {} \;
Em vez de grep
ing sobre a saída de find
, você deve usar seus recursos de filtragem internos para localizar os arquivos correspondentes. Caso contrário, você obteria falsos positivos para arquivos, incluindo a string aaa
.
As substituições de nome de arquivo devem sempre ser citadas para evitar que padrões de espaço em branco ou de globalização sejam expandidos.
Além disso, find
output não deve ser canalizado para while
a menos que você delimite nulo a saída. Se você realmente quer "fazer alguma coisa" com todos os arquivos, não é necessário canalizar para while
. O mesmo efeito pode ser alcançado com a opção -exec
.
Se você precisar de find … | while
, isso é mais seguro (não se esqueça de citar o nome do arquivo):
find … -print0 | while IFS= read -r -d '' file; do command "$file"; done