scp中的正则表达式/通配符

时间:2012-02-23 02:45:14

标签: shell unix file-transfer scp

是否可以在scp中使用通配符

我正在努力实现:

loop
{
   substitue_host (scp path/file.jar user@host:path1/foo*/path2/jar/)
}

我继续得到“scp:模棱两可的目标”

实际上我用source和dest调用api,在下面使用scp并在diff主机上循环放置文件

谢谢!

1 个答案:

答案 0 :(得分:8)

通常,是的,当然可以在scp中使用通配符。

但是,在你的scp命令中,第二个参数是目标,第一个参数是源。您当然无法将源复制到多个目标中。

例如,如果您尝试复制多个jar,那么以下内容肯定会有效:

scp path/*.jar user@host:path2/jar/
在这种情况下,“ambigious target”特别抱怨你正在使用的通配符导致@host系统上的多个可能的目标目录。

---编辑:

如果要复制到远程系统上的多个目录并且必须动态确定它们,则应使用以下脚本:

 dir_list=$(ssh user@host ls -d '/path1/foo*/path2/jar/')

 for dir in $dir_list; do
     scp path/file.jar user@host:$dir
 done

dir_list变量将保存远程系统上ls的执行结果。 -d是为了获取目录名,而不是其内容。单引号用于确保通配符扩展等待在远程系统上执行,而不是在本地系统上执行。

然后你将遍历每个目录以进行远程复制到该目录。

(所有这些都是ksh语法,顺便说一句。)