rsync重复传输本地已存在文件的问题解决求助
问题描述
通过rsync脚本将远程仓库文件同步至本地仓库,脚本由cron每分钟执行,此前稳定运行数月,目标仅传输并记录新文件。但近期远程仓库新增一个包含大量文件的文件夹后,其中已存在于本地的文件仍会被每次同步重复传输,queue.txt中出现重复传输记录,导致下游流程异常。已排查尾斜杠、本地文件存在性及存储空间,均无异常。
同步脚本(transfer.sh)
queueFile='.../queue.txt' localrepo='.../local/repo' foreignrepo='.../foreign/repo' function syncFiles() { local dir="$1" local dest="$2" local queue="$3" for file in "$dir"/* do if [ -d "$file" ]; then # These are the different FCT File extensions rsync -av "$file"/*key*.csv "$dest" | grep -e 'csv' >>"$queue" syncFiles "$file" "$localrepo" "$queueFile" fi done } # Only run if queue.txt does not exist to limit ps creation if [ ! -e "$queueFile" ]; then syncFiles "$foreignrepo" "$localrepo" "$queueFile" echo "Looping through queue lines" # Read lines while read line; do # echo $line ... # this part works done < "$queueFile" rm "$queueFile" else echo "Queue exists... exiting" fi
注:已修正原脚本中>>"$queue的引号缺失问题,以及syncFiles调用时遗漏的第三个参数。
解决方法
1. 修复递归同步的目录结构问题
当前脚本递归调用时,所有子目录的CSV文件都直接同步到本地仓库根目录,未保留源目录结构。这会导致rsync无法正确对比源文件与本地文件的完整路径匹配关系,即使文件内容一致,也可能因路径不匹配被判定为需要同步。
修改syncFiles函数的递归调用逻辑,保持目标目录与源目录结构一致:
function syncFiles() { local dir="$1" local dest="$2" local queue="$3" # 为当前源目录创建对应的本地目标子目录 local target_dir="$dest/$(basename "$dir")" mkdir -p "$target_dir" for file in "$dir"/* do if [ -d "$file" ]; then # 将CSV文件同步到对应子目录,而非根目录 rsync -a --update --out-format='%n' "$file"/*key*.csv "$target_dir" >>"$queue" # 递归调用时,目标路径传入当前子目录的对应本地路径 syncFiles "$file" "$target_dir" "$queue" fi done }
2. 优化rsync参数,仅记录实际传输的文件
原脚本用rsync -av配合grep csv写入队列,会把rsync输出的所有CSV文件名(包括未传输的)都记录下来,导致队列出现重复条目。调整参数实现精准记录:
--update:仅同步本地不存在,或源文件比本地文件更新的文件--out-format='%n':仅输出实际被传输的文件名,无需额外过滤- 移除
-v参数,避免冗余输出干扰队列记录
3. 检查新增文件夹的文件元数据
若上述修改后仍存在重复同步,需排查远程新增文件夹内文件的元数据:
- 检查远程文件的修改时间(
mtime)是否被频繁篡改,比如源端有程序定期更新文件时间戳 - 对比本地与远程文件的权限、所有者属性,若
rsync的-a模式(包含权限、所有者同步)因权限问题无法匹配,也会触发重复同步
4. 修正脚本的其他语法问题
原脚本存在两处语法错误:
- 写入队列时的
>>"$queue缺失闭合双引号,需改为>>"$queue" - 主逻辑调用
syncFiles时遗漏了第三个参数$queueFile,需补全为syncFiles "$foreignrepo" "$localrepo" "$queueFile"
内容的提问来源于stack exchange,提问作者PrinceRi
相关产品推荐
相关产品推荐

