从Windows向Linux批量安全复制大目录并排除指定文件格式的一步式实现方案咨询
从Windows向Linux批量安全复制大目录并排除指定文件格式的一步式实现方案咨询
嘿,我完全懂你的困扰——先本地中转再上传的两步操作不仅冗余,处理TB级数据时还会额外消耗时间和磁盘空间,确实得找个一步到位的办法!结合你提到的限制(无法从Linux服务器反向拉取、Linux端无sudo权限),这里有两个实用的方案:
方案一:PowerShell筛选+SCP批量传输(灵活处理文件)
利用PowerShell的文件检索能力,直接筛选出不需要排除的文件,再批量传到Linux服务器对应目录,全程不用临时中转目录:
# 遍历源目录,排除jpeg/jpg文件,保持目录结构上传 Get-ChildItem -Path "你的源目录路径" -Recurse -File -Exclude "*.jpeg", "*.jpg" | ForEach-Object { # 替换源目录路径为空,得到相对路径,映射到远程目录 $remotePath = "linuxserver:/你的远程目录路径/$($_.DirectoryName.Replace('你的源目录路径', ''))" # 创建远程目录(避免目录不存在导致上传失败) ssh linuxserver "mkdir -p '$remotePath'" # 上传文件 scp $_.FullName "$remotePath/" }
如果需要保留空目录,可以在前面加一段遍历目录的逻辑,先创建所有远程目录结构。
方案二:Tar流式打包+SSH解压(大文件首选,高效省空间)
Windows 10及以上系统自带tar命令,我们可以用它流式打包(不生成本地压缩包),同时排除指定格式文件,然后通过SSH直接传到Linux服务器并实时解压,全程一步完成,特别适合TB级大文件传输:
# 流式打包+传输+解压,一步到位 tar -c --exclude="*.jpeg" --exclude="*.jpg" -f - 你的源目录路径 | ssh linuxserver "mkdir -p /你的远程目录路径 && tar -x -f - -C /你的远程目录路径/"
这个方案的优势:
- 全程流式处理,不占用本地临时磁盘空间;
- 压缩+传输+解压并行进行,速度比先复制中转再上传更快;
- 完全兼容CMD和PowerShell,不用切换环境;
- 不需要Linux端sudo权限,只要你有目标私人目录的写入权限即可。
需要注意的是,确保你能通过SSH正常连接Linux服务器(既然你能使用scp,这点应该已经满足),并且远程目标目录的路径要准确。
备注:内容来源于stack exchange,提问作者obruzzi




