linux下关于SFTP的自动登陆下载文件 .sh脚本编写
1.需求
编写一个shell脚本来自动把某个服务器下的文件下载到本地
2.脚本
#!/bin/bash
# 创建文件夹 来存放文件
dir="td_area_tmp"
if [ ! -d "$dir" ];then
mkdir $dir
echo "创建文件夹成功"
else
echo "文件夹已经存在"
fi
# 文件夹创建成功!!
# 切换文件目录
cd td_area_tmp
# 开始登陆sftp 下载文件
/usr/bin/expect <<\EOF
#@@@@@@@@@@@@@@@@@@@@@@@@参数设置开始@@@@@@@@@@@@@@@
#设置远端IP
set ip 11.11.11.11
#设置用户名
set username hh
#设置密码
set password pass
#@@@@@@@@@@@@@@@@@@@@@@@设置结束@@@@@@@@@@@@@@@@@@@
spawn sftp ${username}@${ip}
expect "*?"
send "yes\r"
expect "*Password"
send "${password}\r"
expect "sftp>"
send "cd /data/disk02/hh/upload/td_area\r"
expect "sftp>"
send "get *.csv ./\r"
expect "sftp>"
send "bye\r"
EOF
# sftp 下载文件完毕
这里使用了/usr/bin/expect 智能问答,有不了解的可以百度下。
3.判断文件夹下的文件数量
这里是我记笔记 ,跟标题无关
#!/bin/bash
## ls -l ./|grep "^-"|wc -l 检查文件个数
## 判断文件个数:
fileCount=$(ls -l |grep "^-"|wc -l)
echo $fileCount
if [[ $fileCount -gt 0 ]]
then
echo "含有"
## 含有文件 往 hdfs 推送
# 检查是否存在该目录
hdfs dfs -test -e /tenants/hh/work/hh/qk/${table_name_tmp}
if [ $? -eq 1 ];then
## 如果存在,这个命令将返回0;反之则返回1。
# 创建文件夹
hdfs dfs -mkdir /tenants/hh/work/hh/qk/${table_name_tmp}
fi
hdfs dfs -put ./*.csv /tenants/hh/work/hh/qk/${table_name_tmp}
# beeline -u jdbc:hive2://11.11.11.11:10000/HH -n hh -p pass -e "truncate table ${table_name_tmp};"
# beeline -u jdbc:hive2://11.11.11.11:10000/HH -n hh -p pass -e "load data inpath '/tenants/hh/work/hh/qk/${table_name_tmp}/*.csv' into table ${table_name_tmp};"
fi
若有错误,希望大佬指出。
对你有帮助给点个👍再走呗。