5

我有以下脚本成功运行。但是,如果我尝试使用通配符来复制多个文件,则会引发错误,提示“没有这样的文件或目录”。

此代码有效:

#!/usr/bin/expect -f
spawn scp file1.txt root@192.168.1.156:/temp1/.
expect "password:"
send "iamroot\r"
expect "*\r"
expect "\r"

以下不起作用:

#!/usr/bin/expect -f
spawn scp * root@192.168.1.156:/temp/. #fails here
….
4

2 回答 2

7

通常*由 shell (bash) 扩展,但在这种情况下,你的 shell 是expect. 我怀疑expect是不是在扩展*.

尝试:

spawn bash -c 'scp * root@192.168.1.156:/temp/.'

解释:

#!/usr/bin/expect -f
spawn echo *
expect "*"

spawn bash -c 'echo *'
expect "file1 file2…"
于 2012-07-02T08:14:23.400 回答
-1

AFAIK scp 默认为文件复制,而 bash 也可能将 * 扩展到目录,如果在当前路径中找到的话。

也许尝试-r(递归)可以解决您的问题(不确定,因为我现在无法测试场景)?

或者,如果您不想复制整个文件夹结构,您可以scp *.txt ...根据需要使用。

于 2012-06-19T00:04:24.617 回答