需求需要将文件迁移至其他服务器上:
- 首先将文件利用tar进行压缩成gz格式,由于需要保持文件原有的属性权限则使用 tar -pczvf # -p参数即保持文件原有属性
- 然后将文件进行scp远程传输,scp传输不会改变文件的原本属性
- scp一个文件需要输入目标机器的密码,则利用expect自动操作输入密码
- 最后将文件进行解压,同时为了保证文件原本的属性则采用 tar -pxzvf
#!/bin/bash
funcA(){
/usr/bin/expect<<EOF #表示开始expect脚本
spawn scp /root/wy/testtarr/$i.gz root@XXX.XXX.XXX:/root/wy/testtar/$i.gz
expect "*password:"
send "XXXXXXXX\r"
expect eof
EOF #结束expect脚本
}
dir=`ls /root/wy/test` #定义遍历的目录
for i in $dir
do
tar -pczvf /root/wy/testtarr/$i.gz /root/wy/test/$i
funcA
tar -pxzvf /root/wy/testtar/$i.gz /root/wy/testwork/$i
echo $i
done
备注:
- expect代码块结尾必须使用interact/eof
- send末尾必须加上\r
- expect代码块需与shell脚本代码块分离