在执行递归复制时,一个循环两次访问相同的“文件”。这可能是由于以循环方式建立的链接引起的。例如,如果创建目录level1:
mkdir level1
Run Code Online (Sandbox Code Playgroud)
然后将下面的文件符号链接到该目录:
cd level1
ln -s . level2
Run Code Online (Sandbox Code Playgroud)
您基本上可以得到一个循环参考。这意味着您可以:
cd level2/level2/level2/...
Run Code Online (Sandbox Code Playgroud)
尽您所能,不要离开level1目录。这将导致递归副本的问题,因为它实际上是一个无限循环。
您可以使用cp -rH或cp -rP(我认为在Solaris 10及更高版本上)不遵循符号链接。
具体来说,您可能对以下三个标志感兴趣:
-H:如果source_file操作数是一个符号链接,则cp复制该符号链接引用的文件到source_file操作数。遍历文件层次结构时遇到的所有其他符号链接都将保留。这意味着,如果您指定为源的文件/目录是一个链接,它将复制该链接的目标。不会遵循该源下的所有符号链接。
-L:复制符号链接引用的文件。遍历文件层次结构时遇到的符号链接不会保留。这将跟随源下的所有符号链接。
-P:复制符号链接。遍历文件层次结构时遇到的符号链接将保留。我认为这与-H特定来源的符号链接相同,但也保留了该符号链接。