使用WinSCP仅下载本地不存在的新文件 避免覆盖已有文件配置咨询
WinSCP 仅下载不存在的本地文件的脚本修改方案
你需要实现的「本地已存在文件则跳过、不覆盖」需求可以直接通过 WinSCP 内置的 get 命令参数实现,不需要额外编写复杂判断逻辑,修改步骤如下:
核心修改点
- 在原有
get命令后添加-skipexisting参数:该参数是 WinSCP 原生支持的功能,执行传输时会自动校验目标路径下的同名文件,只要文件已存在就直接跳过传输,完全不会覆盖本地已有内容。 - 注意原有
rm /*.csv逻辑的适配:如果你的需求是仅删除已经成功下载到本地的远程文件,不要直接执行全量删除,避免跳过传输的文件被误删后无法后续同步。如果你的业务逻辑允许只要本地存在文件就可以删除远程副本,可保留原有删除逻辑。
修改后的完整脚本
# Automatically abort script on errors option batch abort # Disable overwrite confirmations that conflict with the previous option confirm off # Connect using a password open sftp://SERVER@IP_ADDRESS:PORT -privatekey="PRIVATE_KEY" -hostkey="HOSTKEY" -passive=off # Change remote directory cd in cd DIRECTORY # Force binary mode transfer option transfer binary # Get ALL files from the directory specified, skip existing local files get -skipexisting /*.csv* \\DIRECTORY # 【可选调整】如果不需要全量删除远程csv,可注释下方rm命令,或改为仅删除已成功下载的文件 # rm /*.csv # Exit WinSCP bye
补充说明
-skipexisting 参数在 WinSCP 5.8.1 及以上版本均支持,如果你使用的版本过低无法识别该参数,升级到最新稳定版即可正常使用。
内容的提问来源于stack exchange,提问作者alexmerchant
相关产品推荐
相关产品推荐

