f='/path/to/features[30,55].R'
find . -type f -name DONE \
-exec sh -c 'echo cp "$1" "$(dirname "$2")"' sh "$f" {} ';'
Isso chama corretamente sh com um script que copia o arquivo nomeado para o diretório do arquivo DONE encontrado.
Remova o echo quando tiver certeza de que está fazendo a coisa correta.
Alternativamente,
find . -type f -name DONE \
-execdir cp "$f" . ';'
... se o seu find tiver -execdir .
Seu problema foi triplo:
-
O erro vem de deixar
-cdesh -c, o que significa queshestava tentando executar um script chamadocp /Users/perc...(todos como um único nome). Não encontrou este arquivo. -
O subshell também possui uma citação incorreta do nome do arquivo. Como contém caracteres globbing de nomes de arquivos, ele precisa ser citado.
-
Colocar
{}dentro do script é potencialmente perigoso ou pode ter pelo menos uma consequência confusa. Veja por exemplo o Solaris 10 encontra / -exec sh -c "echo {}" \; imprimir "{}" em vez de nomes de arquivos?
Sua segunda tentativa substituirá os arquivos DONE pelo conteúdo do script R. Aqui também, você deve citar o nome do arquivo do script R (isso não vai resolver isso).