我正在使用scp命令从远程服务器中提取一些文件,并且命令的一个变体不起作用。
我在远程服务器中有两个文件名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 .
如果我单独提取文件并且在尝试使用通配符时无法正常工作,为什么它会起作用。
答案 0 :(得分:1)
是的,这是针对SuperUser的。答案是因为星号在命令运行之前执行通配符扩展FIRST。它由你的SHELL扩展。 echo *.xml
将真正运行echo file1.xml file2.xml
,这就是回声看到的,而bash看到了*.xml
。
由于您要将多个文件和路径传递给SCP,因为第一个参数(或第二个)不是主机:/ path。它会混淆。
在命令前放置'echo'以查看实际执行的内容。您不能在远程主机上使用通配符(除非您先将它们转义)。
答案 1 :(得分:-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的密码 - 这可能是一点点令人困惑,特别是如果你错误输入一个)。