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 d
of find
a 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/directory
nie 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/{}" \\;'