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
-c
desh -c
, o que significa quesh
estava 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).