KerWork 处理本地文件时,真正需要防范的是写回阶段:读取通常不会损坏数据,覆盖写入才会让原文件无法找回。比较稳妥的做法是把读取和写入拆成两个目录,写回前先生成改动清单,再用校验值确认源文件和目标文件,最后才执行覆盖。这套流程适用于 KerWork 这类可以指定输入路径、输出路径和执行动作的本地文件处理场景;边界在于,具体配置项名称和日志字段需要结合你所在环境的版本确认,下面的目录和命令都按通用骨架写,替换成实际路径即可。
判断要点:不要让 KerWork 直接覆盖输入目录里的文件。先把输入目录和输出目录分开,写回前生成改动清单(源文件、目标文件、动作类型),对源文件在写入前后各计算一次 sha256 校验值并对比;写回前先复制原文件副本,失败时从备份目录取回原文件。适用场景是本地批处理或文件改写任务;验证方式是对比清单条目与实际输出文件、比对校验值;风险边界是校验值只能证明内容没被意外改动,不能证明改写逻辑符合业务预期,配置项名称需按实际版本确认。
让读取和写入走两个不同的目录
目录分离是保底措施。输入目录只读,KerWork 只从这里读取,不把结果写回输入目录;输出目录存放结果。这样即使写回逻辑出错,原始文件也不会被直接覆盖。
目录结构可以先按下面的方式建立,路径按你的实际存放位置替换:
# 建立输入、输出和备份三个目录
mkdir -p ~/kerwork/in ~/kerwork/out ~/kerwork/backup
# 放入待处理的本地文件
# ~/kerwork/in 下保持原始文件不动
在任务描述里分别写明两个路径,尽量使用绝对路径,避免工作目录变化导致读错位置。写法可以是:
读取目录:/home/user/kerwork/in
写入目录:/home/user/kerwork/out
要求:只读取输入目录中的文件,结果写入输出目录,不要修改输入目录中的任何文件。
如果 KerWork 的本地文件能力通过配置项指定路径,就把输入路径和输出路径填成两个不同的值,不要两个都指向 in。任务执行前,先用 ls ~/kerwork/in 和 ls ~/kerwork/out 分别查看,确认输出目录为空或只包含允许保留的旧结果。
写回前先生成一份改动清单
改动清单的作用是让每一次写入都有可对照的凭据。清单至少要包含三个字段:源文件、目标文件、动作类型。动作类型可以简化为“新增”“覆盖”“跳过”,方便执行后逐条核对。
清单可以由任务描述约束生成,不需要依赖不存在的接口。例如在任务末尾加一段:
写回前先输出改动清单,每行格式为:
源文件 | 目标文件 | 动作类型
只列出实际会写入的文件,不写入的文件标为“跳过”。
清单保存到 /home/user/kerwork/out/changes.txt,确认清单后再执行写入。
清单建议放在输出目录下的固定文件名,例如 changes.txt 或 changes.log,不要放在输入目录。执行完成后用 cat ~/kerwork/out/changes.txt 查看,逐条对照输出目录中的实际文件;如果清单中的目标文件和实际生成的文件对不上,就先停下,不要继续批量处理。
用文件校验值确认内容未被意外修改
目录分离和改动清单只能说明“写到了哪里”,不能说明“写的内容对不对”。对同一个文件在写前和写后各计算一次校验值,可以排除读对了但写错的可能。通用命令如下:
# 写回前,对输入目录中的源文件计算校验值
sha256sum ~/kerwork/in/example.txt
# 写回后,如果目标文件应保持原文,对输出文件再计算一次
sha256sum ~/kerwork/out/example.txt
# 批量查看时,可以把结果分别存下来
sha256sum ~/kerwork/in/* > ~/kerwork/backup/before.sha256
sha256sum ~/kerwork/out/* > ~/kerwork/backup/after.sha256
对比方法很直接:对于不应被改写的文件,前后校验值应一致;对于需要改写的文件,校验值应发生变化,并且变化范围要和改动清单一致。如果某个文件不在清单里,校验值却变了,说明改动范围超出了预期,应停止后续写入,保留现场并检查任务配置。Windows 环境可以把 sha256sum 换成 certutil -hashfile 文件路径 SHA256,对比逻辑相同。
写回失败时保留原文件的处理顺序
出错时的顺序比正常流程更重要。建议固定为:先复制副本,再覆盖目标;失败后先停写入,再从备份目录找回原文件;最后清理临时文件。
- 写回前,把即将被覆盖的原文件复制到备份目录,例如
cp ~/kerwork/out/example.txt ~/kerwork/backup/example.txt.bak。如果输出目录中原本没有这个文件,这一步可以跳过。 - 执行写入。写入过程中如果 KerWork 报错或输出不完整,不要立刻重跑任务,先查看清单和日志,确认哪些文件已经写入。
- 需要恢复时,从
~/kerwork/backup取回副本,复制回输出目录或原位置。输入目录中的文件在整个流程中不应被修改,通常不需要恢复。 - 临时文件(例如写入过程中的中间结果、未完成的
.tmp文件)在确认结果可用后再清理。清理前先确认它们不在改动清单里,避免误删有用内容。
这个顺序的核心是“备份先于覆盖”。只要备份目录里的副本存在,写回失败最多损失一次处理时间,不会损失原始文件。
把核对步骤固化成每次任务前的固定动作
核对不依赖记性,靠一份操作清单。可以把下面这份清单放进任务模板的开头,每次执行前逐项确认:
- 确认输入目录和输出目录是不同路径:执行
ls ~/kerwork/in和ls ~/kerwork/out,检查两个目录内容不同。 - 确认输入目录中的文件未被改动:执行
sha256sum ~/kerwork/in/*,与上一次记录对比。 - 确认改动清单已生成:查看
~/kerwork/out/changes.txt,逐行核对源文件、目标文件、动作类型。 - 确认备份已完成:对将被覆盖的文件执行
ls ~/kerwork/backup,确认副本存在且大小合理。 - 确认写回后的校验结果:执行
sha256sum ~/kerwork/out/*,与清单和写前记录对比。
这份清单建议作为任务描述的前置段落,或者放在任务模板的“执行前检查”位置,而不是放在任务末尾。任务模板中把路径、清单文件名和备份目录写成固定值后,KerWork 每次执行都会经过同样的核对点。页面检查点也可以补充:如果 KerWork 提供文件操作日志或任务执行记录页面,就在写回后查看一次,确认记录中的写入范围与改动清单一致。具体字段和页面位置需要结合你使用的版本确认。