В большинстве случаев, когда мне нужно скопировать много символических ссылок, я на самом деле пытаюсь отразить дерево каталогов. Поэтому я хочу символические ссылки и все остальное.
Это избыточно для копирования всего нескольких символических ссылок, но если вы на самом деле пытаетесь скопировать целое дерево, это может быть очень полезно:
Используйте смолу .
user@host:/cwd$ ( cd /path/to/src ; tar cf - . ) | ( cd /path/to/dest ; tar xf - )
tar не разрешает символическую ссылку по умолчанию, поэтому символические ссылки в зеркальной копии будут указывать на те же места, что и в исходном дереве.
Этот трюк использует подоболочки, чтобы получить команду tar в корне каталога, который нужно отразить; Вы можете оставить один из них (вместе со связанной командой cd ), если вы уже находитесь в каталогах src или dest :
# 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 - )'
Опять же, это не подходит для каждого случая, когда вы хотите скопировать символические ссылки, но это очень полезный фрагмент кода.