A partir de la respuesta de @Joseph R., esta es mi solución para que funcione con find, ya que no pude hacer que su comando funcione. (No creo que lo haga, debido a las reglas que se aplican a \+
: no puede haber nada después del{}
elemento). (No pude comentar. Todo este párrafo se puede eliminar realmente).
Para copiar todos los archivos en el mismo directorio exacto (aquí target/directory
):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D
no es obligatorio aquí, solo creará los directorios no existentes para el destino.
Para copiar una jerarquía de directorios completa y sus archivos (esto omitirá los directorios vacíos) comenzando desde donde se encuentra actualmente:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Como se dijo, esto recreará el árbol a partir de $PWD
. Además, si necesita copiar el directorio vacío, en podría encontrar una manera usando el -type d
de find
yinstall -d
.
Entonces, para copiar el árbol, comenzando desde un directorio que no es $PWD
:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Observe cómo parent/directory
no se copia.
Extra
Para aquellos que usan shell/fish
, aquí está la línea que hace lo mismo:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'