将文件复制到硬链接

将文件复制到硬链接

我最近被我的 Bash 脚本中的一个错误行为所困扰,我想知道:

  1. 这是预期的系统行为吗,还是一个错误?
  2. 理想的解决方法是什么

本质上,问题归结为以下几点。首先,我有一个现有的目录结构,其布局如下。

  • /opt/dir/file.a
  • /opt/dir/file.b
  • /opt/dir/file

其中file硬链接file.a。我想用一个根据参数选择或file选择的 shell 脚本来替换,因此我运行了如下脚本:file.afile.b

cp my_file /opt/dir/file

问题在于,由于file是到的硬链接file.a(意味着这两个文件实际上只是同一 inode 的两个名称),因此更改会反映在和下filefile.a这是明显地这不是我想要的。

看来该cp命令实际上是/opt/dir/file使用截断文件标志打开的,例如:fopen("file", "w+")。并写入它。我原本以为它会破坏硬链接,因为我正在复制新的以该名称命名的文件。

这是 的正确和预期行为cp吗?这对我来说似乎不直观。当我将文件从一个位置复制到另一个位置时,我心里想的是替换它,而不是重写它。是否有 的标志可以避免cp这种情况?我目前的解决方法是rm /opt/dir/file && cp my_file /opt/dir/file

查看手册页出现cp --remove-destination my_file /opt/dir/file可能是正确的解决方案,但我仍然对大家对这个问题的看法感兴趣。

答案1

您所描述的是 的正确行为cp,而不是错误。考虑到您想要的结果,您对脚本所做的修改(rm后跟cp)听起来是正确的方法。

相关内容