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

elm*_*mmo 4 bash volume hardlink

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

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

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

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

BRP*_*ock 5

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

    ln "$FROM" "$TO" || cp "$FROM" "$TO"
Run Code Online (Sandbox Code Playgroud)

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

    cp --reflink=auto "$FROM" "$TO"
Run Code Online (Sandbox Code Playgroud)

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

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