我的 bash 脚本将一些文件复制到一些多个目录中。
为了节省空间和最大化速度,我更喜欢制作硬链接而不是副本,因为无论如何所有副本都需要在其生命周期内保持相同。
但是,该脚本在不同的计算机上运行,并且可能存在目标目录存在于与源目录不同的卷中的情况。在这种情况下,我无法进行硬链接,只需要复制文件即可。
如何检查源目录和目标目录是否存在于同一卷中,以便我根据它进行硬链接或复制?
一个简单的方法就是尝试两者:
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
简单的方法,通过检查是否在成功的ln
地方失败:cp
ln $SRC $TARGET || cp $SRC $TARGET