-
题目:当前有若干台主机,每台主机上都有一个同名文件夹,文件夹中的路径相同,但是在同名文件夹中
不同主机上可能有不同的文件,现在要把这些文件集中到一台主机上同时保持原有的路径不变。 -
解决方法:shell脚本+expect脚本实现自动复制,采用scp命令
-
实现效果:
1、同名文件会重复覆盖
2、不同文件会保存
shell脚本(在汇总主机上执行)
#!/bin/bash
file_list=(ubuntu@193.112.135.231:/home/ubuntu/testfile ubuntu@193.112.135.232:/home/ubuntu/testfile1) #两台存放相同文件名的主机
password_list=("012345678" "012345678") #两台主机对应的密码
for((i=0;i<${#file_list[@]};i++)) #循环遍历两台主机
do
./scp_copy.exp ${file_list[i]} ${password_list[i]}
done
- 可以看出shell脚本调用了expect脚本
expect脚本
#!/usr/bin/expect
set normalizing "/root" #设置汇总目录
set ip [lindex $argv 0] #提取shell命令中调用expect脚本的变量0
set password [lindex $argv 1] #提取shell命令中调用expect脚本的变量1
puts $ip #打印文件目录
puts $password #打印主机密码
spawn scp -r $ip ${normalizing} #spawn为expect中的语法格式,意思为执行一条命令
expect "*password:" #遇到password:提示的时候执行下面的语句
send $password #输入密码
send "\r" #输入回车键,"\n"是换行符
expect eof
- 关于expect脚本中起到了什么作用可以看一下参考文章中的介绍,在本文中主要是为了实现密码的自动输入
- 参考:https://www.cnblogs.com/lixigang/articles/4849527.html