sftp获取linux文件创建时间,expect调用sftp自动填密码登录并按日期时间取最新文件...

本文介绍了一个使用Linux下的expect脚本配合shell脚本自动化从远程服务器下载指定时间范围内的文件的方法。该方案通过精确匹配时间戳来确保下载的是最近的一分钟内的文件。

基本需求:

需要从另外一台主机取当前系统分钟的最新文件(一分钟一个文件,文件名是:YYYYMMDD_hhmmss.txt),且文件名按日期时间生成。此主机开通了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 getfile_sftp.exp ${filename} ${tmpdir}

#文件名 1

filename=”${datehm1}*.txt”

#调用下载脚本

expect getfile_sftp.exp ${filename} ${tmpdir}

#文件名 2

filename=”${datehm2}*.txt”

#调用下载脚本

expect getfile_sftp.exp ${filename} ${tmpdir}

#遍历tmpdir目录,排序取最新的文件

#遍历tmpdir目录,文件名排序取最新的文件

file=”`ls -lr ${tmpdir}/*.txt | grep -v grep | awk ‘{print $9}’ | head -n 1`”

echo $file

被调用脚本getfile_sftp.exp

#!/bin/expect

#以参数调用此脚本: expect getfile_sftp.exp 文件名 本地临时目录

#修改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

可能会下载多个文件,按文件名挑最新的文件即可。判断严格的话,应该记住上次的文件名,本次活动的文件名要不小于上次的才认为是最新的文件。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值