国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令

這篇具有很好參考價值的文章主要介紹了linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

需求

需求方通過sftp不定時的上傳一批用戶(SBXDS_ACC_M_任務(wù)ID_yyyymmddHHMMSS.csv),需要我們從這些用戶中找出滿足條件的用戶。然后把這些結(jié)果用戶通過文件的形式上傳到ftp。

環(huán)境說明

ip1能連接hive庫環(huán)境,不能連接sftp。
ip2不能連接hive庫環(huán)境,能連接sftp。
ip1和ip2是共享盤,能同時訪問公共目錄。

目錄規(guī)劃

源文件名: SBXDS_ACC_M_任務(wù)ID_yyyymmddHHMMSS.csv (例:SBXDS_ACC_M_test001_20240201103828.csv)
結(jié)果文件名: WTF_YBZ_DSGS_任務(wù)id.csv (例:WTF_YBZ_DSGS_test001.csv)
本地路徑: /date/localPath/SBXDS_ACC_M
sftp下載路徑(源文件):/ftpdata/preciseUpload
sftp上傳路徑(結(jié)果文件):/ftpdata/orderringlist

處理邏輯

1.通過sftp獲取preciseUpload目錄下,當天的 SBXDS_ACC_M_*_YYYYMMDD*.csv 文件名,并寫入本地文件SBXDS_ACC_M.txt
2.比對SBXDS_ACC_M.txt里面的文件是否在SBXDS_ACC_M目錄下存在,不存在則將文件名寫入SBXDS_ACC_M_NEWFILES.txt。
3.獲取SBXDS_ACC_M_NEWFILE.txt里面的文件,并寫入hive表 dods_ftp_target_users partition(task_id)。
4.目標用戶與通信圈用戶匹配,跑出結(jié)果數(shù)據(jù)dapp_ftp_calling_txq_users partition(task_id)。
5.結(jié)果數(shù)據(jù)寫入文件WTF_YBZ_DSGS_task_id.csv,并上傳sftp
6.為了防止文件正在傳輸,內(nèi)容未傳輸完,需求方就把文件取走了,導(dǎo)致漏數(shù)據(jù)的情況。在文件上傳之后,對文件進行重命名處理。

hive表

-- 目標用戶hive表
create table ods_target_users(
phone_no string
)

-- 結(jié)果數(shù)據(jù)hive表
create table dapp_target_result_users(
phone_no string,
msg_info string
)

腳本執(zhí)行順序

sh ftp_getTodayFiles.sh 20240201 # ip1執(zhí)行,文件處理
sh ftp_getTxq_users.sh # ip2 執(zhí)行,跑SQL
sh ftp_sftpPutFiles.sh # ip1 執(zhí)行,文件處理

腳本

linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令
#!/bin/bash
# ftp_getTodayFiles.sh
# ip2 執(zhí)行
# 調(diào)用方式 sh ftp_getTodayFiles.sh 20240201

# 定義函數(shù),獲取文件名稱
function funcGetTodayFilesName(){
dateNo=$1
PORT=22
HOST="ip1"  
USERNAME="uname1"
PASSWORD="123456"  
LOCALDIR="/date/localPath/SBXDS_ACC_M"
SFTPDIR="/ftpdata/preciseUpload"
FILENAME="SBXDS_ACC_M_*_$dateNo*"
cd $LOCALDIR
/usr/bin/expect << EOF
spawn sftp -P $PORT $USERNAME@$HOST
expect "*Password*"
send "$PASSWORD\r"
expect "*#"
send "cd $SFTPDIR\r"
expect "*#"
send "ls -1 $FILENAME\r"
expect eof
EOF
}

# 定義函數(shù),sftp獲取文件
function funcSftpGetFile(){
FILENAME=$1
PORT=22
HOST="ip1"  
USERNAME="uname1"
PASSWORD="123456"  
LOCALDIR="/date/localPath/SBXDS_ACC_M"
SFTPDIR="/ftpdata/preciseUpload"
cd $LOCALDIR
/usr/bin/expect << EOF
spawn sftp -P $PORT $USERNAME@$HOST
expect "*Password*"
send "$PASSWORD\r"
expect "*#"
send "cd $SFTPDIR\r"
expect "*#"
send "get $FILENAME \r"
expect eof
EOF
}

# 調(diào)用函數(shù),獲取文件名稱

dateNo=$1
LOCALDIR="/date/localPath/SBXDS_ACC_M"
cd $LOCALDIR
echo "開始獲取sftp目錄下當天文件名稱SBXDS_ACC_M_*_$dateNo*......"
funcGetTodayFilesName $dateNo|grep ".csv" > SBXDS_ACC_M_FILES.txt
echo "獲取sftp目錄下當天文件名稱結(jié)束"

dayfiles=$(cat SBXDS_ACC_M_FILES.txt|wc -l)
if [ $dayfiles -eq 0 ]; then
  echo "sftp今日無文件。"
  exit
else
  echo "當日所有文件:"
  cat SBXDS_ACC_M_FILES.txt
fi


echo "清空文件 SBXDS_ACC_M_NEWFILES.txt"
echo "判斷本地是否存在文件,不存在則將文件名寫入文件SBXDS_ACC_M_NEWFILES.txt"
> SBXDS_ACC_M_NEWFILES.txt
for filename in $(cat SBXDS_ACC_M_FILES.txt|sed 's/\r$//')
do
    if [ -e $filename ];    then
      echo "$filename 已存在"
  else
      echo "$filename 新文件"
      echo $filename >> SBXDS_ACC_M_NEWFILES.txt
  fi
done

newfiles=$(cat SBXDS_ACC_M_NEWFILES.txt|wc -l)
if [ $newfiles -eq 0 ]; then
  echo "無新增文件。"
  exit
else
  echo "文件名寫入SBXDS_ACC_M_NEWFILES.txt結(jié)束"
  echo "當日新增文件$newfiles個:"
  cat SBXDS_ACC_M_NEWFILES.txt
fi

# 調(diào)用函數(shù),sftp獲取文件
echo "開始下載文件...."
LOCALDIR="/date/localPath/SBXDS_ACC_M"
cd $LOCALDIR
for filename in $(cat SBXDS_ACC_M_NEWFILES.txt|sed 's/\r$//')
do 
    echo "下載$filename..."
    funcSftpGetFile $filename
done

echo "下載文件結(jié)束,文件名如下:"
cat SBXDS_ACC_M_NEWFILES.txt

# 驗證 SBXDS_ACC_M_NEWFILES.txt
newfiles2=$(cat SBXDS_ACC_M_NEWFILES.txt|wc -l)
if [ $newfiles2 -eq 0 ]; then
  echo "文件異常?。?!"
  exit 1
fi
ftp_getTodayFiles.sh
linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令
#!/bin/bash
# ftp_getTxq_users.sh
# ip1 執(zhí)行
# 把SBXDS_ACC_M_NEWFILE.txt里面的文件寫入hive表 dods_ftp_target_users partition(task_id)。
# 匹配通信圈用戶 dapp_ftp_txq_users
# 結(jié)果數(shù)據(jù)導(dǎo)入文件WTF_YBZ_DSGS_task_id
# 調(diào)用格式: sh ftp_getTxq_users.sh 20240114

dateNo=$1
LOCALDIR="/date/localPath/SBXDS_ACC_M"
cd $LOCALDIR

newfiles=$(cat SBXDS_ACC_M_NEWFILES.txt|wc -l)
if [ $newfiles -eq 0 ]; then
  echo "無新增文件。"
  exit
fi


fileList=()
for filename in $(cat SBXDS_ACC_M_NEWFILES.txt|sed 's/\r$//')
    do
    task_id=$(echo $filename|cut -d'_' -f4)
    echo "文件名: $filename,任務(wù)ID: $task_id"
    echo "執(zhí)行命令:hadoop fs -mkdir hdfs://ns2/data//dods/dods_ftp_target_users/task_id=$task_id"
    hadoop fs -mkdir hdfs://ns2/data//dods/dods_ftp_target_users/task_id=$task_id
    if [ $? -eq 0 ]; then
      echo "執(zhí)行命令:hadoop fs -put -f $filename hdfs://ns2/data//dods/dods_ftp_target_users/task_id=$task_id"
        hadoop fs -put -f $filename hdfs://ns2/data//dods/dods_ftp_target_users/task_id=$task_id
  else
      echo "分區(qū) $task_id 已存在。"
      echo "執(zhí)行命令:hadoop fs -put -f $filename hdfs://ns2/data//dods/dods_ftp_target_users/task_id=$task_id"
        hadoop fs -put -f $filename hdfs://ns2/data//dods/dods_ftp_target_users/task_id=$task_id
  fi
    
  # 匹配通信圈用戶
  hive -e"
  MSCK REPAIR TABLE dods_ftp_target_users;
  insert overwrite table dapp_ftp_txq_users partition(task_id='${task_id}')
  select a.phone_no,
         b.msg_info
  from   dods_ftp_target_users a,
         dods_msg_info b
  where  a.phone_no=b.phone_no
  and    a.task_id='${task_id}'
  and    b.deal_day='${dateNo}'
  group  by a.phone_no,
         b.msg_info
  "
  # 結(jié)果數(shù)據(jù)導(dǎo)入文件
  hive -e"
    select concat_ws(',',phone_no,msg_info) 
    from dapp_ftp_txq_users 
    where task_id = '${task_id}' 
  " > WTF_YBZ_DSGS_${task_id}
  
  # 文件記錄數(shù)
  file_rows=$(cat WTF_YBZ_DSGS_${task_id}|wc -l)
  msgs="源文件$filename的結(jié)果文件WTF_YBZ_DSGS_${task_id},記錄數(shù)$file_rows。"
  fileList+=$msgs
  done

echo "************************* 執(zhí)行成功 *************************"
for msg in ${fileList[*]}
do
    echo $msg
done
ftp_getTxq_users.sh
linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令
#!/bin/bash
# ftp_sftpPutFiles.sh
# ip2 執(zhí)行
# 調(diào)用格式 sh ftp_sftpPutFiles.sh


# 定義函數(shù),sftp上傳文件
function sftpPutFiles(){
FILENAME=$1
PORT=22
HOST="ip1"  
USERNAME="uname1"
PASSWORD="123456"  
LOCALDIR="/date/localPath/SBXDS_ACC_M"
SFTPDIR="/ftpdata/orderringlist"
cd $LOCALDIR
/usr/bin/expect << EOF
spawn sftp -P $PORT $USERNAME@$HOST
expect "*Password*"
send "$PASSWORD\r"
expect "*#"
send "cd $SFTPDIR\r"
expect "*#"
send "put $FILENAME \r"
expect "*#"
send "rename $FILENAME ${FILENAME}.csv \r"
expect eof
EOF
}

# 調(diào)用函數(shù),sftp上傳文件
LOCALDIR="/date/localPath/SBXDS_ACC_M"
cd $LOCALDIR
newfiles=$(cat SBXDS_ACC_M_NEWFILES.txt|wc -l)
if [ $newfiles -eq 0 ]; then
  echo "無新增文件。"
  exit
fi

echo "開始sftp上傳文件...."
for filename in $(cat SBXDS_ACC_M_NEWFILES.txt|sed 's/\r$//')
    do
    task_id=$(echo $filename|cut -d'_' -f4)
    echo "上傳WTF_YBZ_DSGS_${task_id}..."
    sftpPutFiles WTF_YBZ_DSGS_${task_id}
    done
echo "*************** sftp上傳文件結(jié)束 ***************"
ftp_sftpPutFiles.sh

?文章來源地址http://www.zghlxwxcb.cn/news/detail-825215.html

到了這里,關(guān)于linux 之 shell腳本實現(xiàn)SFTP下載、上傳文件、執(zhí)行sftp命令的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Windows11 - 使用 sftp連接 CentOS 7,實現(xiàn)文件上傳與下載

    Windows系統(tǒng)的cmd命令實現(xiàn)遠程連接服務(wù)器,并且使用 sftp連接 CentOS 7,實現(xiàn)文件上傳與下載 注意:下方所有服務(wù)器ip,均為示例ip 這樣就成功連接上服務(wù)器,不過命令和Linux上命令有所區(qū)別 如下(示例): 注意:sftp 表示已經(jīng)進入 sftp 的交互模式。 連接成功之后,使用 pwd 命令查

    2024年02月03日
    瀏覽(29)
  • shell腳本之003獲取固定時間段(分鐘)內(nèi)的日志,并將其定時通過sftp上傳至服務(wù)器中

    #!/bin/bash export PATH=/home/ccbt/software/lftp-4.9.2/usr/local/bin/:$PATH # 獲取當前系統(tǒng)時間 now=$(date +\\\"%Y/%m/%d %H:%M:%S\\\") echo \\\"當前日期時間:$now\\\" # 當前時間戳 now_time=$(date +%s) echo \\\"當前時間戳:$now_time\\\" #獲取指定開始時間的時間戳 10分鐘 time_befo=$(($now_time-600)) echo \\\"指定開始時間戳: $time_befo\\\"

    2024年02月01日
    瀏覽(22)
  • java- SFTP文件上傳下載

    ? JSch是Java Secure Channel的縮寫,是一個java實現(xiàn)的可以完成sftp上傳下載的工具,我們可以集成它的功能到自己的應(yīng)用程序,本文介紹使用JSch實現(xiàn)的SFTP上傳下載的功能。 ChannelSftp類是JSch實現(xiàn)SFTP核心類,它包含了所有SFTP的方法,如 方法名 功能描述 put() 文件上傳 get() 文件下載

    2024年01月19日
    瀏覽(23)
  • Java從sftp服務(wù)器上傳與下載文件

    業(yè)務(wù)需要從sftp服務(wù)器上上傳、下載、刪除文件等功能,通過查閱資料及手動敲打代碼,實現(xiàn)了操作sftp的基本功能,有需求的小伙伴可以看看具體的實現(xiàn)過程。 摘自百度百科:SSH文件傳輸協(xié)議,是一種數(shù)據(jù)流鏈接,提供文件訪問、傳輸和管理功能的網(wǎng)絡(luò)傳輸協(xié)議。 SFTP允許用

    2024年02月11日
    瀏覽(33)
  • java連接sftp服務(wù)器實現(xiàn)上傳下載

    java連接sftp服務(wù)器實現(xiàn)上傳下載

    我最初的需求是java讀取遠程windows服務(wù)器的文件。查了一圈,發(fā)現(xiàn)將遠程服務(wù)器作為ftp服務(wù)器是最方便快捷的。著手準備,首先要讓遠程服務(wù)器提供ftp服務(wù),再做相關(guān)配置,然后通過代碼配置遠程地址,用戶名密碼(ftp服務(wù)設(shè)置)讀取文件。 我目前使用的是 freeSSHd.exe,下載后

    2024年02月07日
    瀏覽(19)
  • Linux下定時執(zhí)行shell腳本

    vi test.sh 錄入要執(zhí)行的命令 ?保存退出,并且對腳本進行授權(quán) ?:wq chmod 777 test.sh ?生產(chǎn)文件data.txt touch /opt/data.txt ?vi /etc/crontab? 錄入: 一分鐘執(zhí)行一次 ?保存退出即可每個一分鐘執(zhí)行一次 配置說明:

    2024年02月17日
    瀏覽(25)
  • 【Linux】編寫一個 shell 腳本&執(zhí)行

    在Linux中編寫和執(zhí)行腳本相對簡單。下面是一個基本的步驟指南,幫助你創(chuàng)建一個簡單的bash腳本并運行它: 1. 創(chuàng)建腳本文件 首先,你需要使用文本編輯器創(chuàng)建一個新的文件。這個文件通常會有 .sh 的擴展名,以表明它是一個shell腳本。例如,你可以創(chuàng)建一個名為 myscript.sh 的文

    2024年04月26日
    瀏覽(24)
  • shell批量執(zhí)行命令與文件傳輸腳本

    shell批量執(zhí)行命令與文件傳輸腳本

    對未進行主機信任操作的服務(wù)器進行批量操作 由于ssh只能在交互模式中輸入服務(wù)器密碼進行登錄登操作,不便于進行大批量服務(wù)器進行巡檢或日志采集。sshpass恰好又解決了這個問題,使用 ssh -p passwd 可以實現(xiàn)命令行輸入密碼操作,便于進行規(guī)模巡檢 首先需要在腳本執(zhí)行機器

    2024年02月08日
    瀏覽(24)
  • 【Linux命令-shell】虛擬機中創(chuàng)建shell腳本、查看當前路徑、執(zhí)行腳本

    目錄 一、創(chuàng)建shell腳本 二、查看當前的路徑 三、執(zhí)行腳本 一、創(chuàng)建shell腳本 shell腳本的特點 提前將可執(zhí)行的命令語句寫入一個文件中 順序執(zhí)行 解釋器逐行解釋代碼 常見的腳本有:shell、python、PHP...... 注:用什么解釋器就是什么腳本 編寫shell腳本: 步驟: 1、新建文件 2、

    2024年02月05日
    瀏覽(95)
  • Linux shell編程學(xué)習(xí)筆記44:編寫一個腳本,將md5sum命令執(zhí)行結(jié)果保存到變量中,進而比較兩個文件內(nèi)容是否相同

    Linux shell編程學(xué)習(xí)筆記44:編寫一個腳本,將md5sum命令執(zhí)行結(jié)果保存到變量中,進而比較兩個文件內(nèi)容是否相同

    在? Linux shell編程學(xué)習(xí)筆記42:md5sum https://blog.csdn.net/Purpleendurer/article/details/137125672?spm=1001.2014.3001.5501 中,我們提到編寫一個在Linux系統(tǒng)下比較兩個文件內(nèi)容是否相同的腳本。 基本思路是: 其中有兩個難點: 1.文件的md5值的獲取 2.md5值的比較 對于第1個難點,我們的解決辦法是

    2024年04月10日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包