Bash:如果目标位于相同的卷内,则创建硬链接,否则复制

时间:2012-01-11 16:01:15

标签: bash volume hardlink

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

为了节省空间和最大化速度,我宁愿制作硬链接而不是复制品,因为无论如何所有副本在生命中都需要保持相同。

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

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

2 个答案:

答案 0 :(得分:4)

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

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

根据您的目的,创建参考副本(几乎与硬链接文件一样轻,但允许将来编辑/分散两个副本)可能有效:

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

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

    if [ $(stat -c %D "$FROM") = $(stat -c %D "$TARGET_DIR") ]; then
          ln "$FROM" "$TARGET_DIR"/
    else
          cp "$FROM" "$TARGET_DIR"/
    fi

答案 1 :(得分:0)

通过检查lncp成功的地方{/ 1}}是否失败,这是一种简单的方法:

ln $SRC $TARGET || cp $SRC $TARGET