尝试从 Linux 远程 SCP 到 Windows 11 时出错

问题描述 投票:0回答:1

我目前正在尝试使用

scp
将文件从基于 Linux 的远程服务器从 Windows Powershell 终端传输到我的本地计算机。我的机器安装了 Windows 11,尽管我之前一直在运行 Windows 10 的机器上工作。

假设我想下载一组具有不同扩展名的文件,例如

.ext1
_ext2
。当我在工作目录中运行以下命令时

scp user@remote:/nobackup/user/example_path/'{*.ext1,*_ext2}' .

我收到错误

C:\WINDOWS\System32\OpenSSH\scp.exe: /nobackup/user/example_path/{*.ext1,*_ext2}: No such file or directory

这让我有点困惑,因为上面的命令在我的旧 Windows 10 机器上运行。请注意,遥控器的身份验证中没有明显的错误,并且我已经测试了遥控器正确处理通配符

*
格式。据我所知,该错误是由于 Windows 无法正确处理大括号扩展造成的。我尝试过各种其他方法来尝试逃避大括号,例如使用
"
\
`
,但这些都不起作用。

对此的任何帮助将不胜感激。我已经浏览了大量的堆栈溢出帖子,试图找到正确的解决方案,但迄今为止我发现的任何解决方案都不起作用。请注意,我想避免运行多个

scp
命令,因为远程服务器需要对每个调用进行冗长的身份验证。

windows powershell scp
1个回答
0
投票

正如您正确指出的那样,模式

{*.ext1,*_ext2}
显然没有被识别。不确定您之前使用的是什么,但在我的 Linux 系统上,类似 Bash 的表达式(如
{*.x}
)无法被
scp
识别,即使遥控器有
bash
可用。

一些解决方案:

  1. 使用多个命令:

    scp user@remote:/example/path/'*.ext1' .
    scp user@remote:/example/path/'*.ext2' .
    
  2. 在一个命令中指定所有远程路径:

    scp user@remote:/example/path/'*.ext1' user@remote:/example/path/'*.ext2' .
    
  3. 如果您使用的是 bash(或类似)shell,请让 bash 为您执行参数扩展:

    scp user@remote:/example/path/{'*.ext1','*.ext2'} .
    

    这与上面的解决方案 2 相同,但 Bash 会为您进行扩展(请注意,引号仅在内部,因此

    {...}
    会被 Bash 扩展)。

  4. 您可以使用不同的语法在 PowerShell 中执行与解决方案 3 相同的操作。我不太清楚,对PS不够熟悉。查看其他可能有帮助的帖子:Powershell相当于Bash Brace Expansion forgenerate列表/数组

© www.soinside.com 2019 - 2024. All rights reserved.