使用gcloud compute scp续传文件夹时如何忽略远程已存在文件?
解决gcloud compute scp中断后的续传(跳过已存在文件)问题
由于gcloud compute scp本身没有跳过远程已存在文件的参数,直接续传会重新覆盖或传输已完成的文件,推荐用rsync结合gcloud compute ssh的方案,这是处理这类增量续传场景的最优方式。
方法一:rsync + gcloud compute ssh(推荐)
rsync原生支持--ignore-existing参数,可跳过远程已存在的文件,同时通过gcloud的ssh命令作为传输通道,无需手动配置SSH密钥。
基础命令格式
rsync -avz --ignore-existing /本地文件夹绝对路径/ [GCE实例名]:/远程目标文件夹绝对路径/ -e "gcloud compute ssh"
参数说明
-a:归档模式,保留文件权限、时间戳等元数据-v:显示详细传输进度,方便排查问题-z:传输时压缩数据,减少带宽消耗--ignore-existing:核心参数,跳过远程已存在的文件-e "gcloud compute ssh":指定用gcloud的SSH命令建立传输通道,自动处理实例认证
非默认区域/可用区的实例
如果你的实例不在默认区域,需要在ssh命令中添加--zone参数:
rsync -avz --ignore-existing /本地文件夹绝对路径/ [GCE实例名]:/远程目标文件夹绝对路径/ -e "gcloud compute ssh --zone us-central1-a"
方法二:纯gcloud compute scp实现(繁琐,不推荐)
如果一定要用gcloud compute scp,需要先对比本地和远程的文件列表,只传输远程不存在的文件,步骤如下:
- 获取远程已存在的文件列表:
gcloud compute ssh [GCE实例名] -- 'find /远程目标文件夹绝对路径/ -type f' > remote_files.txt
- 生成本地待传输的文件列表(排除远程已有的):
find /本地文件夹绝对路径/ -type f | grep -vFf <(sed 's/^\/远程目标文件夹绝对路径\//\/本地文件夹绝对路径\//' remote_files.txt) > files_to_copy.txt
- 批量传输文件:
xargs -a files_to_copy.txt -I {} gcloud compute scp {} [GCE实例名]:/远程目标文件夹绝对路径/{#替换为本地文件相对路径}
注意:此方法容易出现路径匹配错误,仅作为备选方案。
内容的提问来源于stack exchange,提问作者cbac
相关产品推荐
相关产品推荐

