cp 源文件存在硬链接时,更新现有目标文件导致硬链接被创建

Icy_Ybk 2019-03-13 04:41:00
至少 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 分区里就吃了这种亏,直接报错没权限,排查之后才知道是硬链接问题。
...全文
116 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
Icy_Ybk 2019-03-13
  • 打赏
  • 举报
回复
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.

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧