是否可以在scp中使用通配符
我正在努力实现:
loop
{
substitue_host (scp path/file.jar user@host:path1/foo*/path2/jar/)
}
我继续得到“scp:模棱两可的目标”
实际上我用source和dest调用api,在下面使用scp并在diff主机上循环放置文件
谢谢!
答案 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语法,顺便说一句。)