通常使用 cp -au 从测试目录更新工作目录。这通常符合预期,直到发现:
guest@porteus:~$ echo Update Test
Update Test
guest@porteus:~$ mkdir /tmp/src
guest@porteus:~$ touch /tmp/src/{b,c,d}
guest@porteus:~$ ls -i /tmp/src/{b,c,d}
26019 /tmp/src/b 26020 /tmp/src/c 26025 /tmp/src/d
guest@porteus:~$ ln /tmp/src/b /tmp/src/a
guest@porteus:~$ ls -i /tmp/src
26019 a 26019 b 26020 c 26025 d
guest@porteus:~$ mkdir dst
guest@porteus:~$ cp -a /tmp/src/* dst
guest@porteus:~$ ls -i dst
26002 a 26002 b 26026 c 26034 d
guest@porteus:~$ ln -f dst/c dst/a
guest@porteus:~$ ls -il dst
total 0
26026 -rw-r--r-- 2 guest guest 0 Dec 7 00:00 a
26002 -rw-r--r-- 1 guest guest 0 Dec 7 00:00 b
26026 -rw-r--r-- 2 guest guest 0 Dec 7 00:00 c
26034 -rw-r--r-- 1 guest guest 0 Dec 7 00:00 d
guest@porteus:~$ ls -il /tmp/src/
total 0
26019 -rw-r--r-- 2 guest guest 0 Dec 7 00:00 a
26019 -rw-r--r-- 2 guest guest 0 Dec 7 00:00 b
26020 -rw-r--r-- 1 guest guest 0 Dec 7 00:00 c
26025 -rw-r--r-- 1 guest guest 0 Dec 7 00:00 d
guest@porteus:~$ cp -au /tmp/src/* dst
guest@porteus:~$ ls -il dst
total 0
26026 -rw-r--r-- 3 guest guest 0 Dec 7 00:00 a
26026 -rw-r--r-- 3 guest guest 0 Dec 7 00:00 b
26026 -rw-r--r-- 3 guest guest 0 Dec 7 00:00 c
26034 -rw-r--r-- 1 guest guest 0 Dec 7 00:00 d
Extract from this manual entry for cp:
-u, - 仅当SOURCE文件较新时才更新 比目标文件或当 目标文件丢失
目标目录dst中的文件a,b,c,d不应该被触摸,因为它们的时间戳不能比src中的源等效时间旧。但是dst / b已被触及,在这个基本示例中, cp 不符合更新规范。
到目前为止,我能想到进行复制更新并保留目标目录硬链接结构的唯一方法如下:
答案 0 :(得分:0)
目标目录dst中的文件a,b,c,d不应该有 被触动了,因为他们的时间戳不可能比他们的年龄大 它们在src中的源代码。然而,dst / b已被触及,并且 在这个基本示例中,cp不符合更新规范。
观察到的行为与更新规范不冲突,因为手册中说-u
:仅在... 时复制,文件b
尚未已复制,但已被关联,cp
因-d
暗示选项-a
而必须执行此操作。 (请记住保留在这里意味着保留源的属性,而不是目标的属性。)
到目前为止,我能想到进行复制更新的唯一方法 保留目标目录的硬链接结构如下: ...
如果你想保留目标的硬链接结构,只需要不使用选项-d
,但是e。 G。 cp -pRu …
。