#!/bin/bash # 定义文件路径 SOURCE_PARSE_FILENAME="/usr/src/paperless/git_scripts/parse_filename.py" DEST_PARSE_FILENAME="/usr/src/paperless/scripts/parse_filename.py" SOURCE_PARSERS="/usr/src/paperless/git_scripts/parsers.py" DEST_PARSERS="/usr/src/paperless/src/paperless_tesseract/parsers.py" # 检查文件是否存在 check_files_exist() { local missing=0 for file in "$SOURCE_PARSE_FILENAME" "$DEST_PARSE_FILENAME" "$SOURCE_PARSERS" "$DEST_PARSERS"; do if [ ! -f "$file" ]; then echo "错误:文件不存在 - $file" missing=1 fi done if [ $missing -eq 1 ]; then exit 1 fi } # 显示文件差异 show_diffs() { echo "=== 检查 parse_filename.py 差异 ===" diff -u "$DEST_PARSE_FILENAME" "$SOURCE_PARSE_FILENAME" || true # 差异不存在时不报错 echo -e "\n=== 检查 parsers.py 差异 ===" diff -u "$DEST_PARSERS" "$SOURCE_PARSERS" || true } # 备份并替换文件 replace_files() { # 备份目标文件 backup_file "$DEST_PARSE_FILENAME" backup_file "$DEST_PARSERS" # 执行替换 cp -f "$SOURCE_PARSE_FILENAME" "$DEST_PARSE_FILENAME" cp -f "$SOURCE_PARSERS" "$DEST_PARSERS" echo -e "\n=== 替换完成,以下是替换后的差异(应无差异) ===" show_diffs } # 备份文件(添加 .bak 后缀,保留原权限) backup_file() { local file="$1" local backup="$file.bak" if [ -f "$backup" ]; then # 若已有备份,先删除旧备份(避免累积过多) rm -f "$backup" fi cp -a "$file" "$backup" # -a 保留权限和属性 echo "已备份:$file -> $backup" } # 主逻辑 check_files_exist if [ "$1" = "check" ]; then echo "=== 执行差异检查(不修改文件) ===" show_diffs elif [ "$1" = "replace" ]; then echo "=== 执行文件替换(先备份) ===" replace_files else echo "用法:$0 [check|replace]" echo " check - 仅检查文件差异,不做修改" echo " replace - 备份目标文件并替换,然后显示最终差异" exit 1 fi