达梦数据库linux文件fstp传输并校验

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

原文链接:,转发请注明来源!