Począwszy od odpowiedzi @Josepha R., jest to moje rozwiązanie, aby działało z find, ponieważ nie mogłem sprawić, by jego polecenie działało. (Nie sądzę, żeby tak było, ponieważ obowiązują zasady \+: po {}elemencie nie może być niczego .) (Nie mogłem komentować. Cały ten akapit można faktycznie usunąć.)
Aby skopiować wszystkie pliki do dokładnie tego samego katalogu (tutaj target/directory):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D nie jest tutaj obowiązkowe, po prostu utworzy nieistniejące katalogi do celu.
Aby skopiować całą hierarchię katalogów i jej pliki (spowoduje to pominięcie pustych katalogów), zaczynając od miejsca, w którym aktualnie się znajdujesz:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Jak powiedziano, odtworzy to drzewo, zaczynając od $PWD. Również, jeśli chcesz skopiować pustego katalogu na mogłyby znaleźć sposób używając -type dof finda install -d.
Aby więc skopiować drzewo, zaczynając od katalogu, który nie jest $PWD:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Zauważ, że parent/directorynie jest kopiowane.
Dodatkowy
Dla tych shell/fish, którzy używają , oto linia, która robi to samo:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'