我使用scp命令从远程服务器中提取一些文件,命令的一个变体不起作用。
在远程服务器中有两个文件名为one.xml和two.xml,我使用以下命令将这两个文件拖到当前的dir中:
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 .如果我单独地提取文件,如果我尝试使用通配符来拉动文件,它为什么会工作。
发布于 2013-10-22 04:19:02
是的,这是给SuperUser的。答案是因为星号在命令运行之前先进行通配符扩展。它是由你的外壳展开的。echo *.xml将真正运行echo file1.xml file2.xml,这就是echo所看到的,而bash则看到*.xml。
由于要将多个文件和路径传递给SCP,所以它会被混淆,因为第一个参数(或第二个参数)不是主机:/path。
将“echo”放在命令前面,以查看正在执行的是什么。您不能在远程主机上使用通配符(除非您先转义它们)。
发布于 2013-10-22 04:11:52
你可以从这些结果中澄清。
您可以通过隧道ssh连接来大大简化这个过程(请参阅前面的答案)。我这样做的方法是在本地系统上创建一个. .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会话中的等效方式。)
通过这种设置,您可以在本地使用scp SYSTEMn 3: /data /data,它将自动通过SYSTEM1和SYSTEM2 (并按顺序询问三个SYSTEMn的密码--这可能有点混乱,特别是如果键入错误的话)。
https://stackoverflow.com/questions/19508766
复制相似问题