Meistens, wenn ich viele symbolische Links kopieren muss, versuche ich eigentlich, einen Verzeichnisbaum zu spiegeln. Ich möchte also die Symlinks und alles andere.
Dies ist ein Overkill für das Kopieren einiger Symlinks. Wenn Sie jedoch tatsächlich versuchen, einen gesamten Baum zu kopieren, kann dies sehr nützlich sein:
Verwenden Sie Teer .
user@host:/cwd$ ( cd /path/to/src ; tar cf - . ) | ( cd /path/to/dest ; tar xf - )
tar löst den symbolischen Link nicht standardmäßig auf, sodass symbolische Links in der Spiegelkopie auf dieselben Positionen verweisen wie die im ursprünglichen Baum.
Bei diesem Trick werden Subshells verwendet, um den Befehl tar im Stammverzeichnis des zu spiegelnden Verzeichnisses in Position zu bringen. Sie können einen von ihnen (zusammen mit dem zugehörigen Befehl cd ) auslassen, wenn Sie sich bereits im Verzeichnis src oder dest befinden :
# already in src? user@host:/src$ tar cf - . | ( cd /path/to/dest ; tar xf - ) # already in dest? user@host:/dest$ ( cd /path/to/src ; tar cf - . ) | tar xf - # just need src/foo? # this result will be a mirror copy at dest/foo user@host:/src$ tar cf - foo | ( cd /path/to/dest ; tar xf - ) # mirror to another system? user@host:/src$ tar cf - . | ssh user@example.com '( cd /path/to/dest ; tar xf - )'
Dies ist wiederum nicht für jedes Mal geeignet, wenn Sie symbolische Links kopieren möchten, aber es ist ein sehr nützlicher Ausschnitt.