Wie kopiere ich Verzeichnisse und symbolische Linkdateien?

Wie kopiere ich Verzeichnisse und symbolische Linkdateien?

Ich habe ein Verzeichnis mit riesigen Dateien (insgesamt ca. 1 TB) und möchte sie nicht kopieren. Ich möchte sie jedoch umgehen, daher wäre es praktisch, sie in einer Verzeichnishierarchie zu verknüpfen, auf die ich Zugriff habe (also eine, die ich erstellt habe). Also

/path/to/dirs/
  foo
  bar
  baz/
    tri

Sollte kopiert werden nach

~/path/to/dirs/
  foo -> /path/to/dirs/foo
  bar -> /path/to/dirs/bar
  baz/
    tri -> /path/to/dirs/tri

Antwort1

Mit GNU:

cd ~/path/to/dirs || exit 1
find /path/to/dirs -type d -printf %P\\0 | xargs -0 mkdir -p 
find /path/to/dirs -type f -print0 | 
  xargs -0 cp --symbolic-link --parents --target-directory=.

Antwort2

Mit GNU Coreutils (also unter nicht eingebettetem Linux oder Cygwin):

cp -al /path/to/dirs ~/path/to/dirs

Wenn diese Option cpnicht zur Verfügung steht -l, erstellen Sie zunächst die Verzeichnishierarchie und anschließend einen zweiten Durchgang für die symbolischen Links:

find /path/to/dirs -type d -exec sh -c 'for x do mkdir "$HOME$x"; done' _ {} +
find /path/to/dirs ! -type d -exec sh -c 'for x do ln -s "$x" "$HOME$x"; done' _ {} +

Wenn Sie möchten, können Sie die beiden Durchläufe auch in einem einzigen Befehl kombinieren:

find /path/to/dirs -exec sh -c '
  for x do
    if [ -d "$x" ]; then
      mkdir "$HOME$x"
    else
      ln -s "$x" "$HOME$x"
    fi
  done
' _ {} +

Antwort3

cp --no-dereference orig dest

Dadurch bleiben symbolische Links beim Kopieren erhalten. Hier ist die Dokumentation:

 -P, --no-dereference         never follow symbolic links in SOURCE
 -p                           same as --preserve=mode,ownership,timestamps

verwandte Informationen