1

我正在使用 scp 命令从远程服务器中提取一些文件,但该命令的一种变体不起作用。

我在远程服务器中有 2 个文件名 one.xml 和 two.xml,我使用以下命令将这两个文件拉入当前目录:

scp stuadmin@10.44.220.112:/student/class/Intermediate/one.xml .
scp stuadmin@10.44.220.112:/student/class/Intermediate/two.xml .

上面的命令工作正常,但如果我使用通配符一次性提取所有 xml 文件,如下所示,它会返回scp: No match.

scp stuadmin@10.44.220.112:/student/class/Intermediate/*.xml .

如果我单独提取文件,为什么它会起作用,而如果我尝试使用通配符提取文件却不起作用。

4

2 回答 2

1

是的,这是给超级用户的。答案是因为星号在命令运行之前首先进行了通配符扩展。它由您的 SHELL 扩展。echo *.xml将真正运行echo file1.xml file2.xml,这就是 echo 看到的,而 bash 看到*.xml.

由于您将多个文件和路径传递给 SCP,它会因为第一个参数(或第二个参数)不是主机:/路径而感到困惑。

将“echo”放在您的命令前面,以查看真正正在执行的内容。您不能在远程主机上使用通配符(除非您先转义它们)。

于 2013-10-22T04:19:02.740 回答
-1

你可以从这些结果中澄清

您可以通过在其他 ssh 连接上建立隧道 ssh 连接来大大简化此过程(请参阅此先前的答案)。我这样做的方法是在 LOCAL 系统上创建一个 .ssh/config 文件,其中包含以下条目:

Host SYSTEM3
        ProxyCommand    ssh -e none SYSTEM2 exec /usr/bin/nc %h %p 2>/dev/null
        HostName        SYSTEM3.full.domain
        User            system3user

Host SYSTEM2
        ProxyCommand    ssh -e none SYSTEM1 exec /usr/bin/nc %h %p 2>/dev/null
        HostName        SYSTEM2.full.domain
        User            system2user

Host SYSTEM1
        HostName        SYSTEM1.full.domain
        User            system1user

(假设两个中间主机都将 netcat 安装为 /usr/bin/nc - 如果没有,您可能必须找到/安装一些等效的方式将 stdin&stdout 网关连接到 TCP 会话中。)

有了这个设置,您可以在 LOCAL 上使用 scp SYSTEM3:/data /data,它会自动通过 SYSTEM1 和 SYSTEM2 隧道(并按顺序询问三个 SYSTEMn 的密码 - 这可能有点令人困惑,尤其是如果你打错了一个)。

于 2013-10-22T04:11:52.690 回答