2010-01-28 63 views

回答

4

一个周期,做一个递归复制时,正在访问相同的“文件”两次。这可能是由链接以循环方式设置引起的。例如,如果您的目录level1

mkdir level1 

然后象征性地在那里文件链接到该目录:

cd level1 
ln -s . level2 

你基本上是一个循环引用结束。这意味着你可以这样做:

cd level2/level2/level2/... 

你的心脏的内容,从来没有离开level1目录。这会导致递归副本的问题,因为它会有效地成为无限循环。

您可以使用cp -rHcp -rP(在Solaris 10及更高版本上,我认为)不遵循符号链接。

具体来说,有三个标志,你可能感兴趣的:

  • -H:如果SOURCE_FILE操作数是一个符号链接,然后CP复制由符号链接SOURCE_FILE操作数引用的文件。遍历文件层次结构期间遇到的所有其他符号链接都将保留。这意味着如果您指定的源文件/目录是链接,它将复制该链接的目标。该源下的所有符号链接将不会被遵守。

  • -L:复制由符号链接引用的文件。在遍历文件层次结构期间遇到的符号链接不会被保留。这将遵循源代码下的所有符号链接。

  • -P:复制符号链接。遍历文件层次结构期间遇到的符号链接被保留。我认为这与-H完全相同,但也保留了特定来源的符号链接。

+0

谢谢Pax,我得到了答案 – 2010-01-28 08:16:57