Починаючи з відповіді @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/{}" \\;'