sftp获取linux⽂件创建时间,expect调⽤sftp⾃动填密码登录并
按⽇期时间取最。。。
基本需求:
需要从另外⼀台主机取当前系统分钟的最新⽂件(⼀分钟⼀个⽂件,⽂件名是:),且⽂件名按⽇期时间⽣成。此主机开通了22端⼝,⽀持sftp协议,需要密码登录。
实现思路:
基于linux系统的expect⾃动化命令,调⽤sftp命令登录到主机,下载当前时刻分钟的⽂件到本地。
难点分析:
如何确定⽂件名?肯定不能把所有⽂件都下载。且两台电脑的时间不同步,差了1分钟左右。
解决思路:
此⽅法不⼀定最好,但是满⾜需求。创建两个脚本,第⼀个shell脚本根据当前系统时间⽣成⽂件名(当前
时刻前后1分钟三个),再调⽤第⼆个脚本尝试下载这三个⽂件,最后按⽂件名取下载下来的最新⽂件即可。
脚本 getfile.sh,此脚本由contab1分钟调⽤⼀次
#!/bin/sh
#临时⽬录
tmpdir=${HOME}/tmp
#清临时⽬录
rm -rf ${tmpdir}/*.txt
#——————————————获取当前⽇期和时间
datehm0=”`date +%Y%m%d_%H%M`”
#——————————————获取当前⽇期和时间 -1分钟
datehm1=”`date -d ‘-1 minute’ +%Y%m%d_%H%M`”
#——————————————获取当前⽇期和时间 +1分钟
datehm2=”`date -d ‘1 minute’ +%Y%m%d_%H%M`”
#⽂件名 0
filename=”${datehm0}*.txt”
#调⽤下载脚本
expect p ${filename} ${tmpdir}
#⽂件名 1
filename=”${datehm1}*.txt”
#调⽤下载脚本
expect p ${filename} ${tmpdir}
#⽂件名 2
filename=”${datehm2}*.txt”
#调⽤下载脚本
shell创建文件并写入内容expect p ${filename} ${tmpdir}
#遍历tmpdir⽬录,排序取最新的⽂件
#遍历tmpdir⽬录,⽂件名排序取最新的⽂件
file=”`ls -lr ${tmpdir}/*.txt | grep -v grep | awk ‘{print $9}’ | head -n 1`”
echo $file
被调⽤脚本p
#!/bin/expect
#以参数调⽤此脚本: expect p ⽂件名 本地临时⽬录
#修改ip,⽤户名,密码
set _host “192.100.22.84”
set _user “ggg”
set _pass “123456”
#远端⽂件的⽬录
set _dir “/home/data”
set ipt_file [lindex $argv 0]
set ipt_dir [lindex $argv 1]
set timeout 60
spawn sftp ${_user}@${_host}
expect “Connecting*”
expect “*password:”
send “${_pass}\r”
expect “sftp>”
send “lcd ${ipt_dir}\r”
expect “sftp>”
send “cd ${_dir}\r”
expect “sftp>”
send “get ${ipt_file}\r”
expect “sftp>”
send “bye\r”
expect eof
可能会下载多个⽂件,按⽂件名挑最新的⽂件即可。判断严格的话,应该记住上次的⽂件名,本次活动的⽂件名要不⼩于上次的才认为是最新的⽂件。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。