从Linux远程SCP文件到Windows11时遇花括号扩展错误
解决Windows 11 PowerShell中scp花括号扩展失效的问题
以下是几种无需多次执行scp(避免重复认证)的解决办法:
方法1:利用PowerShell的停止解析符--%
PowerShell的--%符号会停止后续参数的本地解析,让远程服务器直接处理花括号和通配符。执行命令:
scp --% user@remote:/nobackup/user/example_path/'{*.ext1,*_ext2}' .
该命令会把'{*.ext1,*_ext2}'原封不动传递给远程shell,由Linux系统完成花括号扩展,避免Windows本地解析干扰。
方法2:指定多个远程路径(单次认证)
scp支持同时传输多个远程文件,且只需一次认证。直接把两种扩展名的路径分开写:
scp user@remote:/nobackup/user/example_path/*.ext1 user@remote:/nobackup/user/example_path/*_ext2 .
虽然写了两个远程路径,但scp会复用同一个SSH会话,不会重复触发认证流程。
方法3:让远程shell提前解析路径
通过远程shell的命令替换功能,先在服务器端解析花括号扩展,再传递给scp:
scp user@remote:'$(echo /nobackup/user/example_path/{*.ext1,*_ext2})' .
远程服务器会先执行echo命令解析花括号,得到所有匹配的文件路径,再由scp传输这些文件。
方法4:改用rsync(如果已安装)
rsync对跨平台通配符和路径扩展的兼容性更好,若服务器和本地都安装了rsync,可执行:
rsync -avz user@remote:/nobackup/user/example_path/{*.ext1,*_ext2} .
rsync默认会复用SSH连接,同样只需一次认证,且传输效率通常比scp更高。
内容的提问来源于stack exchange,提问作者PhysyCola
相关产品推荐
相关产品推荐

