1、sftp免密配置:ssh-keygen -t rsa -b 4096
直接enter下一步
默认路径:cd ~/.ssh 里面的 id_rsa 文件
复制公钥发给服务器:cat ~/.ssh/id_rsa.pub
测试 ssh 用户名@服务器ip
2明文密码
#读取表名文件
for tname in "${tablename[@]}"
do
sshpass -p "xiaoxiang.232" sftp ${sftpuser}@${sftphost}<<EOF
get ${downpath}/${tname} ${localpath}
exit
EOF
#脚本缺少删除本地目录文件,懒得写
#!/bin/bash
sftpuser=edwftp
sftphost=11.19.11.11
downpath=/app
filecfg=/app/config
check_interval=100
filecfg=/app/moia/etlsh/config
datadate=$1
localpath=/app/wenxiao/$datadate
del_date=$(date -d"$datadate -7 day" "+%Y%m%d")
delpath=/app/wenxiao/$del_date
if [ ! -d "$localpath" ] ; then
mkdir -p $localpath
else
rm -rf $localpath
mkdir -p $localpath
fi
if [ -d $delpath ] ; then
rm -rf $delpath
fi
tablename=(
"ok.txt"
"ok1.tx"
)
while true; do
missing_files=()
for file in "${tablename[@]}"
do
if ! ssh -o StrictHostKeyChecking=no -q ${sftpuser}@${sftphost} "test -e '${downpath}/${file}'"; then
missing_files+=("$file")
fi
done
# 所有文件存在:执行传输
if [ ${#missing_files[@]} -eq 0 ]; then
echo "所有文件已存在,开始 SFTP 传输..."
break
fi
# 等待并提示
echo "等待文件就绪(${check_interval}秒后重试)... 缺失文件:"
printf ' - %s\n' "${missing_files[@]}"
sleep $check_interval
done
#读取表名文件
for tname in "${tablename[@]}"
do
sftp ${sftpuser}@${sftphost}<<EOF
#get ${downpath}/${datadate}/${tname}_${datadate}*.* ${localpath}/${datadate}
get ${downpath}/${tname} ${localpath}
exit
EOF
#判断文件实际条数与ok文件条数是否一致
fileokcount=`cat ${localpath}/${datadate}/${tname}_${data_date}.del.ok |awk -F ' ' '{print $1}'`
filedelcount=`cat ${localpath}/${datadate}/${tname}_${data_date}.del | wc -l`
#echo "$fileokcount"
#echo "$filedelcount"
#echo "记录条数:$count"
if [ $fileokcount = $filedelcount ];then
echo "ok文件与del文件数据一致,条数${filedelcount}"
else
echo "数据不一致:数据文件${filedelcount}条,ok文件$fileokcount条"
exit 1
fi
#判断文件大小是否一致
fileoksize=`cat ${datapath}/${datadate}/${tname:4}_${datadate}.del.ok |awk -F ' ' '{print $2}'`
filesize=`ls -l ${localpath}/${datadate}/${tname}_${data_date}.del|awk '{print $5}'`
if [ $fileoksize = $filesize ];then
echo "ok文件与del文件数据大小一致,大小${fileoksize}"
else
echo "数据不一致:数据文件大小${filesize},ok文件大小${fileoksize}"
exit 1
fi
done