À partir de la réponse de @Joseph R., voici ma solution pour le faire fonctionner avec find, car je ne pouvais pas faire fonctionner sa commande. (Je ne pense pas que ce soit le cas, en raison des règles qui s'appliquent à \+
: il ne peut rien y avoir après l' {}
élément.) (Je ne pouvais pas commenter. Tout ce paragraphe peut en fait être supprimé.)
Pour copier tous les fichiers dans le même répertoire exact (ici target/directory
):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D
n'est pas obligatoire ici, il créera simplement les répertoires inexistants sur la cible.
Pour copier toute une hiérarchie de répertoires et ses fichiers (cela supprimera les répertoires vides) à partir de l'endroit où vous vous trouvez actuellement:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Comme dit, cela va recréer l'arbre à partir de $PWD
. En outre, si vous avez besoin de copier le répertoire vide, sur pourrait trouver un moyen utilisant le -type d
de find
et install -d
.
Donc, pour copier l'arborescence, à partir d'un répertoire qui n'est pas $PWD
:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Remarquez comment parent/directory
n'est pas copié.
Supplémentaire
Pour ceux qui utilisent shell/fish
, voici la ligne qui fait de même:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'