Linux·shell远程传输文件

Linux·shell远程传输文件

下载expect命令 sudo apt-get install expect

spawn: 是开一个新的进程去执行后面的命令
expect:是获取spawn命令执行后的信息,看看是否和其事先指定的相匹配,如果匹配就会执行后面的内容。如果单独写expect不写spawn,就不会触发。
send: 发送指定的字符给系统。
exp_continue: 是让expect继续往下匹配。
eof: 关键字用于匹配结束符。
expect 中scp命令传输文件是单个执行的需要具体到文件名
interact 允许用户使用命令交互操作

使用scp传输

#!/bin/bash/

hd=(86 19 91 71 13 51 36 70 31 30 17 11 34 75 74 81 87 89 79 88 10 83 90 76 84 85 97 18 38 59 50 ZZZZ )
# 打印数组的个数
echo "打印数组的个数" ${#hd[@]}

# 获取上月的时间
NowTime=`date -d "1 month ago" +"%Y%m"`
# 指定传输文件的月份
# NowTime='202209'
# 远程服务器密码
password=123456
 
echo "省份文件传输开始"
for ((i=0;i<${#hd[@]};i++))
do
# 文件名 
hd_name_3=${hd[i]}settlement${NowTime}.zip
hd_name_8=${hd[i]}new_settlement${NowTime}.zip
 
echo '当前传输的文件名:' ${hd_name}

# scp -p 远程端口 -r 本地路径 用户名@ip:/远程路径
# 远程传输
# 三个文件的传输
expect -c "
    spawn scp -r /rxldc/${hd_name_3} acc@ip:/home/ldcc/
    expect {
        \"*assword\" {set timeout 300; send \"${password}\r\"; exp_continue;}
        \"yes/no\" {send \"yes\r\";}
    }
expect eof" 

# 八个文件的传输
expect -c "
    spawn scp -r /rxldc/${hd_name_8} acc@ip:/home/ldcc/
    expect {
        \"*assword\" {set timeout 300; send \"${password}\r\"; exp_continue;}
        \"yes/no\" {send \"yes\r\";}
    }
expect eof" 

done
echo '===文件传输完成===='

使用sftp传输

#!/bin/bash/
# 传输的省份文件
hd=( 59 )
# 打印数组的个数
echo "打印数组的个数" ${#hd[@]}

# 获取上月的时间
NowTime=`date -d "1 month ago" +"%Y%m"`
# 指定传输文件的月份
# NowTime='202209'
# 远程服务器密码
password=123456
# 覆盖解压
cd /home/rxld/
unzip -o test${NowTime}.zip
# 修改文件名
mv test1${NowTime}.csv test2${NowTime}.csv
echo "省份文件传输开始" test${NowTime}.zip
for ((i=0;i<${#hd[@]};i++))
do
# 文件名

hd_name_8=test*${NowTime}.csv

echo '当前传输的文件名:' ${hd_name_8}

# 远程传输
# 八个文件的传输
expect -c "
    #spawn scp -r /home/rxld/${hd_name_8} user@192.268.101.100:/download/
    spawn sftp user@192.268.101.106
    expect {
        \"*assword\" {set timeout 300; send \"${password}\r\"; exp_continue;}
        \"yes/no\" {send \"yes\r\";}
        \"sftp>\" {send \"put /home/set/${hd_name_8} /download\r\";}
        #\"Uploading\" {send \"exit\n\";}
    }
#    interact   ###允许用户使用命令交互操作
    # 退出远程连接
    expect \"sftp>\" {send \"exit\r\";}
expect eof"

done
echo '===8个文件的传输完成===='
echo '===end文件的传输完成end===='

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青鸟遇鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值