至少 coreutils-8.28 在 ubuntu 18.04 lts 上是这样,尝试如下的情景:有两个文件夹,一个是源文件夹 src,一个是目标 dst。文件夹 src 下存在一个文件 first,先创建它的一个硬链接
$ ln "src/first" "src/second"
然后复制 src 所有文件到 dst 里
$ cp --no-preserve=links "src/*" "dst/"这时 ls -l 可以看到 dst 文件夹里是两个常规文件。
再次复制,不过用 -u 去更新
$ cp -u --no-preserve=links "src/*" "dst/"
用 ls-l 再看 dst 文件夹里就变成了俩 hard links 了,不过 dst/first 和 dst/second 是一对,src/first 和 src/second 是一对,用 find 可以判断出来。加了 --no-preserve=links 仍无法避免这样的问题,而且只有 -u 才会有这种问题,不加 -u 复制多少遍都还是常规文件。就算不加 --no-preserve 在第一次复制的时候也是常规文件,不知道怎么回事第二次就变硬链接了。请问,应该如何避免这样的问题?或者,有没有其他的解决方案?有一次在复制文件到 FAT32 分区里就吃了这种亏,直接报错没权限,排查之后才知道是硬链接问题。

解决方案 »

  1.   

    cp 的 infopage 中有对 --update 参数有这样的解释,不知道什么意思,没翻译懂,不过应该跟这个有关(当然,我只是想解决,而不仅仅是了解这个问题)
    Consequently, depending on the order that files are processed from the source, newer files in the destination may be replaced, to mirror hard links in the source.