windows服務器和linux服務器ftp取數腳本
來源:程序員人生 發布時間:2016-06-27 09:00:27 閱讀次數:3015次
linux(ip假設為11.11.0.1)從linux(ip假設為11.11.0.2)那末需要在11.11.0.2上裝vsftp也就是ftp服務端,在11.11.0.1裝ftp客戶端,
下載地址http://download.csdn.net/detail/u012209894/9537732
#!/bin/sh
########################################################################
#
# 此便可手工履行腳本,需要傳入履行日期,也可自動履行
#
########################################################################
# 機構號(需要寫死本來日期可寫死TIMETMP便可,如你需要20150202當天的數據,重跑需刪除jksj文件夾下當天的文件)
set -e
ORGCODE=883000
# 自動輸入前1天的日期
TIMETMP=$(date -d"yesterday" +%Y%m%d)
#read var
#TIMETMP=$var
#重跑需刪除當天文件數據
cd /home/pasdb/doload/pasdata/jksj/
rm -rf $TIMETMP
#系統當前日期
SYSTIME=$(date '+%Y-%m-%d %H:%M:%S')
NOWDATE=${SYSTIME:0:10}
NOWTIME=${SYSTIME:11:8}
#310天之前的日期
tendays=$(date -d"30 days ago" +%Y%m%d)
# 如果格式為:2010-07-07
if test "${#TIMETMP}" = 10
then
YYY=${TIMETMP:0:4}
MMM=${TIMETMP:5:2}
DDD=${TIMETMP:8:9}
INDATE=$YYY$MMM$DDD
# 如果輸入日期格式為:20100707
else
INDATE=$TIMETMP
fi
# 修改日期格式為:2010-07-07
YYY=${INDATE:0:4}
MMM=${INDATE:4:2}
DDD=${INDATE:6:7}
PROCDATE=$YYY"-"$MMM"-"$DDD
YEARBEGIN=$YYY"-01-01"
# 前1天日期格式為:2010-05⑵0
#DAYAGO=$(date -d "$PROCDATE ⑴ days" +%Y-%m-%d)
#AGODATE=$(date -d "$PROCDATE ⑴ days" +%Y%m%d)
#nMonBegDate=$(date -d "$PROCDATE" +%Y%m)"01"
#nMEndLaDate=$(date -d "$nMonBegDate ⑴ days +1 months" +%Y%m%d)
logYear=$YYY
logMonth=$MMM
if [ "$PROCDATE" \< "$NOWDATE" ]
then
#腳本寄存目錄
DATAPATH=/home/pasdb/doload
#LOADPATH=/home/pasdb/doload/pas_load_CORE.sql
PROCPATH=/home/pasdb/doload/pas_pro_file.sh
#FTP信息:IP地址:FTPIP;用戶名:FTPNAME;密碼:FTPPWD;FTP目錄:FTPDATAPATH;FTP保存文件名:FTPFILE
FTPIP="11.11.0.2"
FTPNAME="sjff"
FTPPWD="sjff"
FTPDATAPATH="/home/sjff/CORE/ADD/"$INDATE
FTPFILE_CORE="CORE_"$ORGCODE"_"$INDATE"_ADD.tar.Z"
#初始化標記值為0
LOADFLAG=0
# 創建工作目錄
createWorkSpace()
{
if [ ! -e $DATAPATH"/pasdata" ]
then
mkdir pasdata
cd pasdata
# dbresult 寄存履行結果
mkdir dbresult
# zipdata 寄存ftp下載的zip數據文件
mkdir zipdata
mkdir zipdata/sjff
mkdir zipdata/sjff"/"$INDATE
# unzipdata 寄存履行當天M包解壓臨時寄存目錄
mkdir unzipdata
# log 寄存日志文件
mkdir log
#CORE 寄存CORE日志文件
mkdir CORE
mkdir jksj
mkdir jksj"/"$INDATE
#mkdir log"/CORE/"$logYear
#mkdir log"/CORE/"$logYear"/"$logMonth
else
cd $DATAPATH"/pasdata"
if [ ! -e dbresult ]
then
mkdir dbresult
fi
if [ ! -e zipdata ]
then
mkdir zipdata
fi
if [ ! -e zipdata/sjff ]
then
mkdir zipdata/sjff
fi
if [ ! -e zipdata/sjff/$INDATE ]
then
mkdir zipdata/sjff/$INDATE
fi
if [ ! -e unzipdata ]
then
mkdir unzipdata
fi
if [ ! -e log ]
then
mkdir log
fi
if [ ! -e jksj/$INDATE ]
then
mkdir jksj/$INDATE
fi
fi
DATAPATH=$DATAPATH"/pasdata"
}
#創建程序實現功能所需的目錄空間
createWorkSpace $DATAPATH
LOGFILE=$DATAPATH"/log/CORE_"$INDATE".log"
DBRESULT=$DATAPATH"/dbresult"
DAILY_BATCH_LAST_DATE_CORE=$DBRESULT"/daily_batch_last_date_core"
DAILY_BATCH_BEGIN_STATE_CORE=$DBRESULT"/daily_batch_begin_state_core"
SQL_RESULT_CORE_LOAD=$DBRESULT"/sql_result_core_load"
if [ ! -e $DAILY_BATCH_LAST_DATE_CORE ]
then
touch $DAILY_BATCH_LAST_DATE_CORE
fi
if [ ! -e $DAILY_BATCH_BEGIN_STATE_CORE ]
then
touch $DAILY_BATCH_BEGIN_STATE_CORE
fi
if [ ! -e $SQL_RESULT_CORE_LOAD ]
then
touch $SQL_RESULT_CORE_LOAD
fi
#寫日志
WriteLog()
{
if [ ! -e $LOGFILE ]
then
touch $LOGFILE
fi
if [ "$1" != "" ]
then
echo $(date '+%Y-%m-%d %H:%M:%S')"=======>"$1 | tee -a $LOGFILE
fi
}
# ftp download data
/usr/bin/ftp -n<<!
open $FTPIP
user $FTPNAME $FTPPWD
binary
prompt off
cd $FTPDATAPATH
lcd $DATAPATH"/zipdata/sjff/"$INDATE
mget "$FTPFILE_CORE"
close
bye
!
cd $DATAPATH"/zipdata/sjff/"$INDATE
WriteLog "download ftp file is end."
if [ -f "$FTPFILE_TPDM" ]
then
#FILESIZE=$(ls -l $FTPFILE_CORE|awk '{printf $5}')
#FILESIZE=$(awk BEGIN'{printf "%.3f", '$FILESIZE'/(1024*1024)}')
#cd $DATAPATH"/pasdata/zipdata/sjff/"$INDATE
#chmod 777 "$INDATE"
tar -zxvf $FTPFILE_CORE -C /home/pasdb/doload/pasdata/unzipdata
WriteLog "download ftp file is success and tar file to unzipdata success"
mv "/home/pasdb/doload/pasdata/unzipdata/CORE_BDFMHQAA_"$INDATE"_ADD_883.del" /home/pasdb/doload/pasdata/jksj"/"$INDATE/BDFMHQAA.DEL
WriteLog "copy required file to jksj success"
#驗證文件是不是齊全
cd /home/pasdb/doload/pasdata/jksj"/"$INDATE
if [ 1 != $(ls -A | wc -l) ]
then
WriteLog "today jksj file incomplete data"
cd /home/pasdb/doload/pasdata/jksj
rm -rf $INDATE
else
touch ok.dat
WriteLog "today jksj file complete data and create ok.dat file"
fi
cd /home/pasdb/doload/pasdata/unzipdata
rm -f *.del
WriteLog "delete unzipdata file successfully"
cd /home/pasdb/doload/pasdata/log
rm -f "CORE_"$tendays".log"
WriteLog "remove ten days before log file successfully"
cd /home/pasdb/doload/pasdata/zipdata/sjff
rm -rf $tendays
WriteLog "remove ten days before sjff file successfully"
LOADFLAG=1
else
WriteLog "download ftp file is fail,please check the ftp file is exist?"
LOADFLAG=0
fi
fi
linux(ip假設為11.11.0.1)從windows(ip假設為11.11.0.2)那末需要在11.11.0.2上裝ftp服務端,在11.11.0.1裝ftp客戶端,如果取文件夾則用下面的方法wget,取文件用上面的方法。
#!/bin/sh
########################################################################
#
# 腳本說明:績效考核系統日終腳本文件
# 此便可手工履行腳本,需要傳入履行日期,也可自動履行
#
########################################################################
#(需要寫死本來日期可寫死TIMETMP便可,如你需要20150202當天的數據,重跑需刪除jksj文件夾下當天的文件)
set -e
#自動獲得昨天的日期
TIMETMP=$(date -d"yesterday" +%Y%m%d)
#手工輸入昨天日期
#read var
#TIMETMP=$var
#當天重跑獲得昨天文件 需刪除昨天文件數據
if [ ! -e /xxpas/doload/jksj/ ]
then
mkdir -p /xxpas/doload/jksj/
else
cd /xxpas/doload/jksj/
rm -rf $TIMETMP
fi
#系統當前日期
SYSTIME=$(date '+%Y-%m-%d %H:%M:%S')
NOWDATE=${SYSTIME:0:10}
#NOWTIME=${SYSTIME:11:8}
#310天之前的日期
tendays=$(date -d"30 days ago" +%Y%m%d)
# 如果格式為:2010-07-07
if test "${#TIMETMP}" = 10
then
YYY=${TIMETMP:0:4}
MMM=${TIMETMP:5:2}
DDD=${TIMETMP:8:9}
INDATE=$YYY$MMM$DDD
# 如果輸入日期格式為:20100707
else
INDATE=$TIMETMP
fi
# 修改日期格式為:2010-07-07
YYY=${INDATE:0:4}
MMM=${INDATE:4:2}
DDD=${INDATE:6:7}
PROCDATE=$YYY"-"$MMM"-"$DDD
YEARBEGIN=$YYY"-01-01"
if [ "$PROCDATE" \< "$NOWDATE" ]
then
#腳本寄存目錄
DATAPATH=/xxpas/doload
#初始化標記值為0
LOADFLAG=0
# 創建工作目錄
createWorkSpace()
{
if [ ! -e $DATAPATH"/jksj" ]
then
mkdir jksj
# log 寄存日志文件
mkdir log
else
cd $DATAPATH"/jksj"
if [ ! -e log ]
then
mkdir log
fi
fi
DATAPATH=$DATAPATH"/jksj"
}
#創建程序實現功能所需的目錄空間
createWorkSpace $DATAPATH
LOGFILE=$DATAPATH"/log/xxjk_"$INDATE".log"
#寫日志
WriteLog()
{
if [ ! -e $LOGFILE ]
then
touch $LOGFILE
fi
if [ "$1" != "" ]
then
echo $(date '+%Y-%m-%d %H:%M:%S')"=======>"$1 | tee -a $LOGFILE
fi
}
# ftp download data ip 用戶名 密碼 自行更改 取前1天日期的文件夾
wget -r -nH -P/xxpas/doload/jksj ftp://11.11.0.2"/"$INDATE --ftp-user=admini1 --ftp-password=123
cd $DATAPATH"/"$INDATE
WriteLog "download ftp file is end."
#tar -zxvf $FTPFILE_CORE -C /xxpas/doload/jksj"/"$INDATE
#gunzip -n $FTPFILE_CORE
WriteLog "download ftp file is success and tar file to jksj success"
#刪除10天前文件
cd /xxpas/doload/jksj/log
rm -f "xxjk_"$tendays".log"
WriteLog "remove ten days before log file successfully"
cd /xxpas/doload/jksj
rm -rf $tendays
WriteLog "remove ten days before sjff file successfully"
LOADFLAG=1
else
WriteLog "download ftp file is fail,please check the ftp file is exist?"
LOADFLAG=0
fi
linux上使用手動輸入日期循環取數據
#!/bin/sh
########################################################################
# 此便可手工履行腳本,需要傳入履行日期,也可自動履行
#
########################################################################
# 機構號(需要寫死本來日期可寫死TIMETMP便可,如你需要20150202當天的數據,重跑需刪除jksj文件夾下當天的文件)
set -e
ORGCODE=883000
# 自動輸入前1天的日期
#TIMETMP=$(date -d"yesterday" +%Y%m%d)
#liulei 20160531 add begin
read var
read endvar
datebeg=$var
dateend=$endvar
beg_s=`date -d "$datebeg" +%s`
end_s=`date -d "$dateend" +%s`
while [ "$beg_s" -le "$end_s" ]
do
TIMETMP=$beg_s
#重跑需刪除當天文件數據
cd /home/pasdb/doload/addpasdata/jksj/
rm -rf $TIMETMP
#系統當前日期
SYSTIME=$(date '+%Y-%m-%d %H:%M:%S')
NOWDATE=${SYSTIME:0:10}
NOWTIME=${SYSTIME:11:8}
#10天之前的日期
tendays=$(date -d"30 days ago" +%Y%m%d)
# 如果格式為:2010-07-07
if test "${#TIMETMP}" = 10
then
YYY=${TIMETMP:0:4}
MMM=${TIMETMP:5:2}
DDD=${TIMETMP:8:9}
INDATE=$YYY$MMM$DDD
# 如果輸入日期格式為:20100707
else
INDATE=$TIMETMP
fi
# 修改日期格式為:2010-07-07
YYY=${INDATE:0:4}
MMM=${INDATE:4:2}
DDD=${INDATE:6:7}
PROCDATE=$YYY"-"$MMM"-"$DDD
YEARBEGIN=$YYY"-01-01"
# 前1天日期格式為:2010-05⑵0
#DAYAGO=$(date -d "$PROCDATE ⑴ days" +%Y-%m-%d)
#AGODATE=$(date -d "$PROCDATE ⑴ days" +%Y%m%d)
#nMonBegDate=$(date -d "$PROCDATE" +%Y%m)"01"
#nMEndLaDate=$(date -d "$nMonBegDate ⑴ days +1 months" +%Y%m%d)
#logYear=$YYY
#logMonth=$MMM
if [ "$PROCDATE" \< "$NOWDATE" ]
then
#腳本寄存目錄
DATAPATH=/home/pasdb/doload
#LOADPATH=/home/pasdb/doload/pas_load_CORE.sql
PROCPATH=/home/pasdb/doload/pas_pro_file.sh
#FTP信息:IP地址:FTPIP;用戶名:FTPNAME;密碼:FTPPWD;FTP目錄:FTPDATAPATH;FTP保存文件名:FTPFILE
FTPIP="11.11.0.2"
FTPNAME="sjff"
FTPPWD="sjff"
FTPDATAPATH="/home/sjff/CORE/ADD/"$INDATE
FTPFILE_CORE="CORE_"$ORGCODE"_"$INDATE"_ADD.tar.Z"
#初始化標記值為0
LOADFLAG=0
# 創建工作目錄
createWorkSpace()
{
if [ ! -e $DATAPATH"/addpasdata" ]
then
mkdir addpasdata
cd addpasdata
# dbresult 寄存履行結果
mkdir dbresult
# zipdata 寄存ftp下載的zip數據文件
mkdir zipdata
mkdir zipdata/sjff
mkdir zipdata/sjff"/"$INDATE
# unzipdata 寄存履行當天M包解壓臨時寄存目錄
mkdir unzipdata
# log 寄存日志文件
mkdir log
#CORE 寄存CORE日志文件
mkdir CORE
mkdir jksj
mkdir jksj"/"$INDATE
#mkdir log"/CORE/"$logYear
#mkdir log"/CORE/"$logYear"/"$logMonth
else
cd $DATAPATH"/addpasdata"
if [ ! -e dbresult ]
then
mkdir dbresult
fi
if [ ! -e zipdata ]
then
mkdir zipdata
fi
if [ ! -e zipdata/sjff ]
then
mkdir zipdata/sjff
fi
if [ ! -e zipdata/sjff/$INDATE ]
then
mkdir zipdata/sjff/$INDATE
fi
if [ ! -e unzipdata ]
then
mkdir unzipdata
fi
if [ ! -e log ]
then
mkdir log
fi
if [ ! -e jksj/$INDATE ]
then
mkdir jksj/$INDATE
fi
fi
DATAPATH=$DATAPATH"/addpasdata"
}
#創建程序實現功能所需的目錄空間
createWorkSpace $DATAPATH
LOGFILE=$DATAPATH"/log/CORE_"$INDATE".log"
DBRESULT=$DATAPATH"/dbresult"
DAILY_BATCH_LAST_DATE_CORE=$DBRESULT"/daily_batch_last_date_core"
DAILY_BATCH_BEGIN_STATE_CORE=$DBRESULT"/daily_batch_begin_state_core"
SQL_RESULT_CORE_LOAD=$DBRESULT"/sql_result_core_load"
if [ ! -e $DAILY_BATCH_LAST_DATE_CORE ]
then
touch $DAILY_BATCH_LAST_DATE_CORE
fi
if [ ! -e $DAILY_BATCH_BEGIN_STATE_CORE ]
then
touch $DAILY_BATCH_BEGIN_STATE_CORE
fi
if [ ! -e $SQL_RESULT_CORE_LOAD ]
then
touch $SQL_RESULT_CORE_LOAD
fi
#寫日志
WriteLog()
{
if [ ! -e $LOGFILE ]
then
touch $LOGFILE
fi
if [ "$1" != "" ]
then
echo $(date '+%Y-%m-%d %H:%M:%S')"=======>"$1 | tee -a $LOGFILE
fi
}
# ftp download data
/usr/bin/ftp -n<<!
open $FTPIP
user $FTPNAME $FTPPWD
binary
prompt off
cd $FTPDATAPATH
lcd $DATAPATH"/zipdata/sjff/"$INDATE
mget "$FTPFILE_CORE"
close
bye
!
cd $DATAPATH"/zipdata/sjff/"$INDATE
WriteLog "download ftp file is end."
if [ -f "$FTPFILE_TPDM" ]
then
tar -zxvf $FTPFILE_CORE -C /home/pasdb/doload/addpasdata/unzipdata
WriteLog "download ftp file is success and tar file to unzipdata success"
mv "/home/pasdb/doload/addpasdata/unzipdata/CORE_BWFMATMD_"$INDATE"_ADD_883.del" /home/pasdb/doload/addpasdata/jksj"/"$INDATE/BWFMATMD.DEL
WriteLog "copy required file to jksj success"
#驗證文件是不是齊全
cd /home/pasdb/doload/addpasdata/jksj"/"$INDATE
if [ 1 != $(ls -A | wc -l) ]
then
WriteLog "today jksj file incomplete data"
cd /home/pasdb/doload/addpasdata/jksj
rm -rf $INDATE
else
touch ok.dat
WriteLog "today jksj file complete data and create ok.dat file"
fi
cd /home/pasdb/doload/addpasdata/unzipdata
rm -f *.del
WriteLog "delete unzipdata file successfully"
cd /home/pasdb/doload/addpasdata/log
rm -f "CORE_"$tendays".log"
WriteLog "remove ten days before log file successfully"
cd /home/pasdb/doload/addpasdata/zipdata/sjff
rm -rf $tendays
WriteLog "remove ten days before sjff file successfully"
LOADFLAG=1
else
WriteLog "download ftp file is fail,please check the ftp file is exist?"
LOADFLAG=0
fi
fi
beg_s=$((beg_s+86400))
done
如果是windwos上循環取數據就使用,目前只能想到日期范圍在1個月之內的,由于windowns上的日期date算超越月外的就比較繁瑣了
@echo on
::------------------------------------------------------------------
:: example :call test.bat 20160101 20160110
::------------------------------------------------------------------
setlocal enabledelayedexpansion
set startdate=%1
set enddate=%2
set FTP_SERVER=11.11.0.2
set FTP_USER=admin1
set FTP_PASSWORD=admin1
echo 當前輸入日期為1:%startdate%
rem pause
set dy=%startdate:~,4%
set dm=%startdate:~4,2%
set dd=%startdate:~6,2%
echo 當前輸入日期為:%dy%%dm%%dd%
set StartTime=%Time:~0,2%:%Time:~3,2%:%Time:~6,2%
rem pause
set PAS_DATE=%dy%%dm%%dd%
:start
D:
set PAS_ROOT=D:\DATA\JKSJ
if not exist %PAS_ROOT% mkdir %PAS_ROOT%
set FTP_CMD_FILE=%PAS_ROOT%\ftpcmd.txt
set PAS_DATA_DIR=%PAS_ROOT%\%PAS_DATE%
if not exist %PAS_DATA_DIR% mkdir %PAS_DATA_DIR%
echo 文件夾地址%PAS_DATA_DIR%
rem 從FTP獲得數據
echo open %FTP_SERVER%>%FTP_CMD_FILE%
echo %FTP_USER%>>%FTP_CMD_FILE%
echo %FTP_PASSWORD%>>%FTP_CMD_FILE%
echo ascii>>%FTP_CMD_FILE%
echo literal pasv>>%FTP_CMD_FILE%
echo prompt >>%FTP_CMD_FILE%
echo cd %PAS_DATE%>>%FTP_CMD_FILE%
echo lcd %PAS_DATE%>>%FTP_CMD_FILE%
echo mget *.*>>%FTP_CMD_FILE%
echo close>>%FTP_CMD_FILE%
echo bye>>%FTP_CMD_FILE%
ftp -s:%FTP_CMD_FILE%
c:
echo 解壓開始 >>%PAS_DATA_DIR%\GetOK.dat
C:\"Program Files"\WinRAR\winrar.exe e %PAS_DATA_DIR%\*.zip %PAS_DATA_DIR%
echo 解壓完成 >>%PAS_DATA_DIR%\GetOK.dat
set EndTime=%Time:~0,2%:%Time:~3,2%:%Time:~6,2%
echo FTP下載數據開始時間:%StartTime%,結束時間:%EndTime%
echo FTP下載數據開始時間:%StartTime%,結束時間:%EndTime% >>%PAS_DATA_DIR%\GetOK.dat
D:
cd %PAS_DATA_DIR%
if exist *.ok (
echo %PAS_DATE%>>%PAS_DATA_DIR%\JKSJOK.dat
)
echo 存在>>%PAS_DATA_DIR%\GetOK.dat
set /a "PAS_DATE+=1"
echo now date:%PAS_DATE%
echo now enddate:%enddate%
rem pause
if "%enddate%" neq "%PAS_DATE%" goto start
exit
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈