指定本机文件,同步到远程指定IP机器
#!/usr/bin/expect
set passwd "hd792310"
set host [lindex $argv 0]
set file [lindex $argv 1]
spawn rsync -av $file root@$host:$file
expect {
"yes/no" { send "yes\r"}
"password:" { send "$passwd\r" }
}
expect eof
其中$host可以写一个文本列表,$file文件列表,也可以写入一个文件。用for循环来实现批量同步
注意:本地同步目录到远程服务器后,会覆盖掉远程服务器指定目录下的所有文件,变为和本地服务器目录一模一样。如果只是同步指定的文件,则只会改变指定的文件,其它文件不变。
示例:如果要同步指定的目录下的文件,写一个列表文件file-list
/tmp/1.expect
/tmp/3.expect
/tmp/2.expect /tmp/4.expect /tmp/install.log
然后执行命令
for list in `/root/cat file-list`; do echo $list; expect 5.expect 192.168.11.70 $list; done
此条命令会根据得出的列表,一次一次登录远程机器,同步得出的列表文件。有多少文件,登录同步多少次。这样做的效率有点低。其实rsync有批量同步的功能,具体看下一章--files-from 功能
同样,也可以做一个IP列表,嵌套循环来同步多台机器。