加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

unix – 中断文件夹中的所有硬链接

发布时间:2020-12-15 18:37:06 所属栏目:安全 来源:网络整理
导读:我有一个文件夹,其中包含一定数量的具有硬链接的文件(在同一个文件夹或其他地方),我想对这些文件进行去硬链接,因此它们变得独立,对其内容的更改不会影响任何文件其他文件(他们的链接数变为1). 下面,我给出一个解决方案,基本上将每个硬链接复制到另一个位置,
我有一个文件夹,其中包含一定数量的具有硬链接的文件(在同一个文件夹或其他地方),我想对这些文件进行去硬链接,因此它们变得独立,对其内容的更改不会影响任何文件其他文件(他们的链接数变为1).

下面,我给出一个解决方案,基本上将每个硬链接复制到另一个位置,然后将其移回原位.

然而,这种方法似乎相当粗糙,容易出错,所以我想知道是否有一些命令会为我解除文件链接.

粗俗答案:

查找具有硬链接的文件(编辑:要查找具有硬链接的套接字等,请使用find -not -type d -links 1):

find -type f -links +1

解压缩文件的粗略方法(将其复制到另一个位置,然后将其移回):
编辑:正如Celada所说,最好在下面执行cp -p,以避免丢失时间戳和权限.编辑:创建一个临时目录并复制到其下的文件,而不是覆盖临时文件,它可以最大限度地降低覆盖某些数据的风险,尽管mv命令仍有风险(感谢@Tobu).

# This is unhardlink.sh
set -e
for i in "$@"; do
  temp="$(mktemp -d ./hardlnk-XXXXXXXX)"
  [ -e "$temp" ] && cp -ip "$i" "$temp/tempcopy" && mv "$temp/tempcopy" "$i" && rmdir "$temp"
done

因此,要取消硬链接所有硬链接(编辑:已更改-type f到-not -type d,请参见上文):

find -not -type d -links +1 -print0 | xargs -0 unhardlink.sh
您的脚本还有改进的余地,例如在cp命令中添加-p选项,以便在unhardlink操作中保留权限和时间戳,并且您可以添加一些错误处理,以便在以下情况下删除临时文件错误,但解决方案的基本思想是唯一可行的.要取消链接文件,您必须复制它,然后将副本移回原始名称.没有“不那么粗糙”的解决方案,并且该解决方案具有竞争条件,以防另一个进程同时访问该文件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读