
Wie kann ich einen Ordner kopieren, der symbolische Links enthält, und die symbolischen Links im Zielordner beibehalten? Ich mache so etwas mit PHP/Bash:
system("cp -r production-clone-target production-sites/{$instanceName}");
aber die symbolischen Links werden nicht im Zielordner angezeigt.
Antwort1
--preserve=links
Versuchen Sie, den Schalter zu Ihrem Befehl hinzuzufügen cp
.
Aus man cp
:
--preserve[=ATTR_LIST]
preserve the specified attributes (default: mode,ownership,timestamps),
if possible additional attributes: context, links,xattr, all
Bearbeiten: Wenn Sie unter OS X arbeiten, verwenden Sie cp -a
.
Antwort2
Sie können auch rsync verwenden:
-l, --links copy symlinks as symlinks
Mir gefällt -a
, das dieses hier auch mit einschließt, um auch Unterverzeichnisse etc. zu kopieren.
-a, --archive archive mode; equals -rlptgoD (no -H,-A,-X)
In Ihrem Codebeispiel könnten Sie also Folgendes tun:
system("rsync -a production-clone-target production-sites/{$instanceName}");
Antwort3
Lassen wir die berechtigten Bedenken hinsichtlich der Verwendung system()
in Ihrem PHP-Programm außer Acht:
cp
verfügt hierfür möglicherweise nicht über standardisierte Optionen, die bei Linux und BSDs üblich sind, aber pax
es gibt sie.
( cd Quelle && pax -pp -r -w * Ziel/ )