find
do -execdir
parece mais apropriada:
find /path/to/searchdir -name file.rtf -execdir cp -v /path/to/filetocopy.rtf . \;
Isso executará o cp
de cada diretório encontrado contendo um arquivo chamado file.rtf
, portanto, .
, visto por cp
, será o diretório apropriado toda vez que cp
for executado.
Você pode adicionar -delete
para excluir o arquivo (depois de verificar se tudo funciona).
O motivo pelo qual sua abordagem não está funcionando é que o shell avalia dirname {}
antes de executar find
e dirname {}
outputs .
. Então
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" 'dirname {}' \;
torna-se
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" . \;