备份目录叫 Weekly Report,脚本里 cp $SRC $DST 执行后报 cp: cannot stat 'Weekly',目标目录里多出两个空文件,源文件一个没拷过去。乍看像缓存或者权限的锅,追下去往往不是。
SRC="/data/Weekly Report" mkdir -p "$DST" cp -a "$SRC" "$DST/"
追下去是这么回事:变量展开后没有引号包裹,shell 按空格做分词,一个路径变成两个参数。参数位置往后错,命令含义完全变了。
「变量未加引号」这类改动最怕改一半,回滚脚本先准备好,再动生产。测试环境和线上的差别,往往就在版本号和那几行被忽略的配置上。
线上出问题先对时间点,跟发布、备份、任务执行的时刻排一排,能省掉一半功夫。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。
具体做法是,所有变量引用都写成 "$VAR" 路径尤其不能省;数组用 "${arr[@]}" 展开;用 shellcheck 扫一遍 SC2086;拿带空格的目录实际跑一次 确认文件数量对得上。
验收就看一点,带空格的目录能完整拷贝,目标目录文件数和源目录一致。
