find
-execdir
кажется более подходящим:
find /path/to/searchdir -name file.rtf -execdir cp -v /path/to/filetocopy.rtf . \;
Это запустит cp
из каждого найденного каталога, содержащего файл с именем file.rtf
, поэтому .
с точки зрения cp
будет соответствующим каталогом при каждом запуске cp
.
Затем вы можете добавить -delete
, чтобы удалить файл (после проверки все работает).
Причина, по которой ваш подход не работает, заключается в том, что оболочка вычисляет имя каталога {}
перед запуском find
и имя каталога {}
выводит .
. Таким образом,
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" `dirname {}` \;
становится
find /path/to/searchdir -name "file.rtf" -exec cp -v "/path/to/filetocopy.rtf" . \;