重击:符号链接跟踪

我有一个文件树,其中包含我生成的一堆数据。我已经决定,在数据生成的几个阶段,我想在使用的程序中尝试一些不同的配置选项。 我的解决方案是复制数据树,并符号链接到所有原始数据(乘以我正在运行的新测试的数量)。然后,我将根据需要让程序破坏符号链接。结果将是不会受到新配置影响的数据的原始数据符号链接,以及任何新内容的真实数据的符号链接。 问题是我使用的大多数程序中的“ 0”选项都遵循符号链接,因此实际上覆盖了我的原始数据。有什么我可以尝试的(例如bash环境设置之类的东西?),可能会使所有这些程序破坏实际的符号链接,而不是它指向的数据吗?     
已邀请:
这可能是不可能的-该选项可能仅通过以'truncate \'模式打开文件才能起作用-替换符号链接实际上实际上必须事先使用单独的功能删除文件[符号链接]。您可以尝试将原始数据文件的权限(
chmod -w
)设置为不允许写入,但这可能会使它无法正常工作     
程序在写入之前是否检查新输出是否与旧输出相同?如果没有,那么符号链接似乎不会提供任何优势,因为数据存储在运行分析的过程中总是统一的。 您是否可以更改程序写入输出的方式?以下顺序将避免遵循符号链接: 将新的输出写入
out.tmp
如果旧输出output3ѭ和
out.tmp
相同,则删除ѭ2delete 否则,将
out.tmp
移到
out
的上方 数据有多大?是否足够大,值得优化存储需求?您可以始终保存完整的输出,并在事实结束后进行一些分析(在最简单的情况下为
diff
),以查看数据是否相同。 如果数据量为GB,则可能需要查看一个文件系统,该文件系统将为您优化重复数据(此功能称为“重复数据删除”)。或者,您可以使用LVM的快照支持,该支持允许使用廉价的文件系统写时复制快照。 作为穷人的重复数据删除文件系统,您可以在bash中执行以下操作:
for file in $output_files; do
    md5=`md5sum $file | awk \'{print $1}\'`
    if [ ! -f \"db/$md5\" ]; then
        mv $file db/$md5
    fi
    ln -sf db/$md5 $file
done
    

要回复问题请先登录注册