4

我的 bash 脚本将一些文件复制到一些多个目录中。

为了节省空间和最大化速度,我更喜欢制作硬链接而不是副本,因为无论如何所有副本都需要在其生命周期内保持相同。

但是,该脚本在不同的计算机上运行,​​并且可能存在目标目录存在于与源目录不同的卷中的情况。在这种情况下,我无法进行硬链接,只需要复制文件即可。

如何检查源目录和目标目录是否存在于同一卷中,以便我根据它进行硬链接或复制?

4

2 回答 2

4

一个简单的方法就是尝试两者:

    ln "$FROM" "$TO" || cp "$FROM" "$TO"

根据您的目的,创建参考副本(几乎与硬链接文件一样轻量级,但允许将来编辑/发散两个副本)可能会起作用:

    cp --reflink=auto "$FROM" "$TO"

但是,您可以使用以下方法获取设备文件系统的设备 ID stat

    if [ $(stat -c %D "$FROM") = $(stat -c %D "$TARGET_DIR") ]; then
          ln "$FROM" "$TARGET_DIR"/
    else
          cp "$FROM" "$TARGET_DIR"/
    fi
于 2012-01-11T16:09:25.110 回答
1

简单的方法,通过检查是否在成功的ln地方失败:cp

ln $SRC $TARGET || cp $SRC $TARGET
于 2012-01-11T16:04:57.493 回答