指定本机文件,同步到远程指定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列表,嵌套循环来同步多台机器。