大多数时候,当我需要复制许多符号链接时,实际上是在尝试镜像目录树。所以我想要符号链接和其他所有东西。
这对于仅复制几个符号链接来说是多余的,但是如果您实际上是在尝试复制整个树,则这可能非常有用:
使用tar。
user@host:/cwd$ ( cd /path/to/src ; tar cf - . ) | ( cd /path/to/dest ; tar xf - )
tar默认情况下不会解析符号链接,因此镜像副本中的符号链接将指向与原始树中相同的位置。
这个技巧利用子外壳使tar命令位于要镜像目录的根目录中。如果您已经在src或dest目录中,则可以忽略其中之一(以及相关的cd命令):
# 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@ '( cd /path/to/dest ; tar xf - )'
同样,这并不适合您每次要复制符号链接的情况,但这是一个非常有用的代码段。