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