使用 scp 复制时如何使用通配符 (*)?

Lan*_*nes 186 scp putty wildcards

为什么我*在路径中使用字符时不能用 scp 复制?

scp SERVERNAME:/DIR/* .
Run Code Online (Sandbox Code Playgroud)

SCP 需要什么配置才能允许*在路径中?

更新:问题不在服务器端;pscp 正在尝试使用 SCPv1,这就是错误消息的原因:

有关名为 * 的文件的 scp 命令行和错误消息

Chr*_*own 167

您需要传递一个字面转义来scp避免远程机器将其*视为一个 glob(请注意它是双引号的):

scp 'SERVERNAME:/DIR/\*' .
Run Code Online (Sandbox Code Playgroud)

  • 您要么需要引号,要么需要星号前的反斜杠,而不是两者都需要。并且 scp 不是扩展它的那个,shell 才是。 (66认同)
  • 你试过吗?我刚刚做了,完全按照我的描述工作(引用和转义会导致失败)。User1274964 甚至在他的回答中确认了行为。`触摸/tmp/abcd.1234; scp 'localhost:/tmp/abcd.\*' ./`: `scp: /tmp/abcd.*: 没有那个文件或目录` (3认同)
  • @Patrick 问题是关于使用 *literal* 星号,即完全避免通配,而不是关于如何在遥控器上通配。 (2认同)
  • 实际上,问题是关于在客户端获取 `pscp` 以允许远程连接。 (2认同)

小智 75

我发现帕特里克的建议是正确的,尽管克里斯的回答让我走上了正确的道路。使用引号,然后星号前不需要反斜杠。

  • 是的,因为这意味着您*想要*在遥控器上使用 glob。问题是关于如何*停止*遥控器上的通配符(以获得文字“*”),而不是关于如何仅在遥控器上通配符。 (4认同)
  • @克里斯唐。不。用户希望通配符不在主机上扩展,并且确实希望它在远程上扩展,以允许它匹配那里的多个文件。返回的文件中都没有文字“*”。您的意思是“_停止_在 _host_ 上进行 globbing”吗? (4认同)

hol*_*ill 7

为了避免通配符,您需要单引号和转义星号:

scp 'SERVERNAME:/DIR/\*' ./
Run Code Online (Sandbox Code Playgroud)

如果要使用通配符,请使用单引号或仅转义星号:

scp 'SERVERNAME:/DIR/*' ./
# or
scp SERVERNAME:/DIR/\* ./
Run Code Online (Sandbox Code Playgroud)

似乎只支持文件名scp通配符,不支持目录名