A partir da resposta de Joseph R., esta é minha solução para fazê-lo funcionar com o find, pois eu não poderia fazer o comando dele funcionar. (Acho que não, devido às regras aplicáveis \+
: não pode haver nada após o{}
elemento.) (Não pude comentar. Este parágrafo inteiro pode realmente ser removido.)
Para copiar todos os arquivos no mesmo diretório (aqui target/directory
):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D
não é obrigatório aqui, apenas criará os diretórios inexistentes para o destino.
Para copiar uma hierarquia de diretórios inteira e seus arquivos (isso omitirá diretórios vazios) a partir de onde você está:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Como dito, isso recriará a árvore a partir de $PWD
. Além disso, se você precisar copiar o diretório vazio, poderá encontrar uma maneira de usar o -type d
de find
einstall -d
.
Portanto, para copiar a árvore, iniciando em um diretório que não seja $PWD
:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Observe como parent/directory
não é copiado.
Extra
Para quem usa shell/fish
, aqui está a linha que faz o mesmo:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'