Ausgehend von der Antwort von @Joseph R. ist dies meine Lösung, damit es mit find funktioniert, da ich sein Kommando nicht zum Laufen bringen konnte. (Ich glaube nicht, weil die Regeln für ... gelten\+
: Nach dem {}
Element darf nichts stehen .) (Ich konnte keinen Kommentar abgeben. Dieser ganze Absatz kann tatsächlich entfernt werden.)
So kopieren Sie alle Dateien in genau dasselbe Verzeichnis (hier target/directory
):
find directory/to/copy -type f -exec install -Dm 755 "{}" "target/directory" \;
-D
ist hier nicht zwingend erforderlich, es werden nur die nicht vorhandenen Verzeichnisse zum Ziel angelegt.
So kopieren Sie eine ganze Verzeichnishierarchie und ihre Dateien (dabei werden leere Verzeichnisse weggelassen) von Ihrem aktuellen Standort aus:
find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;
Wie gesagt, wird hierdurch der Baum neu erstellt, beginnend mit $PWD
. Auch wenn Sie das leere Verzeichnis kopieren müssen, könnte on eine Möglichkeit finden, das -type d
von zu verwendenfind
undinstall -d
.
Um den Baum zu kopieren, gehen Sie also von einem Verzeichnis aus, das nicht $PWD
:
(cd parent/directory && find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \;)
Beachten Sie, wie parent/directory
nicht kopiert wird.
Extra
Für diejenigen shell/fish
, die es benutzen , ist hier die Zeile, die dasselbe tut:
fish -c 'cd parent/directory; and find directory/tree/to/copy -type f -exec install -Dm 755 "{}" "target/directory/{}" \\;'