Починаючи з відповіді @Joseph R., це моє рішення змусити його працювати з пошуку, так як я не міг змусити його командування працювати. (Я не думаю, що це відбувається через правила, що застосовуються до \+: після {}елемента не може бути нічого .) (Я не міг прокоментувати. Весь цей абзац можна фактично видалити.)
Щоб скопіювати всі файли в той самий каталог (тут target/directory):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D тут не є обов'язковим, він просто створить неіснуючі каталоги до цілі.
Щоб скопіювати всю ієрархію каталогів та її файли (це опустить порожні каталоги), починаючи з того місця, де ви зараз перебуваєте:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Як було сказано, це відтворить дерево, починаючи з $PWD. Крім того , якщо вам потрібно скопіювати порожній каталог, на міг знайти спосіб , використовуючи -type dв findі install -d.
Отже, щоб скопіювати дерево, починаючи з каталогу, який не є $PWD:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Зверніть увагу, як parent/directoryне скопійовано.
Додатково
Для тих, хто використовує shell/fish, ось такий рядок:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'