cod*_*ver 3 unix shell scp file-transfer
是否可以在scp中使用通配符
我想要实现:
loop
{
substitue_host (scp path/file.jar user@host:path1/foo*/path2/jar/)
}
Run Code Online (Sandbox Code Playgroud)
我继续得到"scp:模棱两可的目标"
实际上我正在调用一个带有source和dest的api,它在下面使用scp并在diff主机上循环放置文件
谢谢!
一般来说,是的,在scp中使用通配符当然是可能的.
但是,在你的scp命令中,第二个参数是目标,第一个参数是源.您当然无法将源复制到多个目标中.
例如,如果您尝试复制多个jar,那么以下内容肯定会起作用:
scp path/*.jar user@host:path2/jar/
Run Code Online (Sandbox Code Playgroud)
在这种情况下,"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
Run Code Online (Sandbox Code Playgroud)
该dir_list变量将保存ls远程系统上执行的结果.该-d是让你得到的目录名称,而不是它们的内容.单引号用于确保通配符扩展等待在远程系统上执行,而不是在本地系统上执行.
然后你将遍历每个目录以进行远程复制到该目录.
(所有这些都是ksh语法,顺便说一下.)