불특정 파일리스트 FTP 전송 스크립트
2011.02.18 02:24
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
원문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
환경 : 비정기적으로 디렉토리와 파일명이 불특정한 파일들을 서버A -> 서버B 로 파일 전송이 필요한 요구환경
예)
서버A 에서
/dri1/dir2/dir3/file.name
/dri1/dir2/file.name
/dir1/dir2/dir3/dir4/dir5/dir6/file.name
같은 파일들을 서버B의 동일 혹은 동일하지 않은 디렉토리로 전송.
위의 요구에 의해서 쉘스크립트에 의해서 파일을 전송할때 디렉토리명과 파일명을 서로 분리해야할 필요가 생긴다.
/dir1/dir2/file.name 이라면 /dir1/dir2 와 file.name 을 분리해야 한다.
이때 사용할 수 있는 다음과 정규표현식을 이용한다.
# : 최소한 일치되는 접두어 제거
## : 최대한 일치되는 접두어 제거
% : 최소한 일치되는 접미어 제거
%% : 최대한 일치되는 접미어 제거
# A=/usr/local/src/filename
# echo ${A}
/usr/local/src/filename
# echo ${A#/*/}
local/src/filename
# echo ${A#/*/*/}
src/filename
# echo ${A##/*/}
filename
# echo ${A%/*}
/usr/local/src
# echo ${A%%/*}
--출력내용 없음--
이 정규표현식을 이용해서 다음과 같은 스크립트를 작성하였다.
#!/bin/ksh
################################################
# script by : in-sang cho #
# http://www.ischo.net // chosim1@naver.com #
# Ver. Date : 2011.02.17 #
################################################
## ENV ###############################
## Server1 Server
Server1_SERVER=
Server1_USER=
Server1_PASSWD=
INPUT_FILE=./filelist.txt
######################################
## Define Function
# FTP전송을 담당하는 함수
function Function_FTP
{
ftp -n $DEST_SERVER << !
user $DEST_USER $DEST_PASSWD
lcd $SOURCE_DIR
cd $TARGET_DIR
prompt
bi
mput $SOURCE_FILE
bye
!
}
# 테스트용 함수
function Function_Test
{
echo
echo 'SOURCE='"192.168.1.69:"$SOURCE_DIR"/"$SOURCE_FILE
echo 'TARGET='$DEST_SERVER":"$TARGET_DIR"/"$SOURCE_FILE
echo
}
## MAIN PROCEDURE
MAX_FILE_LIST=`cat $INPUT_FILE | wc -l`
i=1
while [ $i -le $MAX_FILE_LIST ]
do
READ_FILENAME=`head -$i $INPUT_FILE | tail -1`
SOURCE_DIR=`echo ${READ_FILENAME%/*}`
SOURCE_FILE=`echo ${READ_FILENAME##/*/}`
SOURCE_FULL_FILE=`echo $SOURCE_DIR"/"$SOURCE_FILE`
Function_FTP
i=`expr $i + 1`
done
INPUT_FILE=./filelist.txt 와 같이 정의한 바 대로
filelist.txt 에 기록된 파일리스트들을 읽어와서 해당서버로 보내는 기능을 한다.
파일을 하나하나 읽어들여 FTP로 한개씩 전송하게 되므로 파일 10개 보내는데 FTP 접속을 10번 한다.
아울러 문자열 잘라내기 팁 하나 더~~
FILENAME=/dir1/dir2/dir3/filename 일때 / 를 구분자로 기준하여 잘라내기
# cat $FILENAME | cut -f1 -d "/"
(내용없음) /dir1... 제일 앞의 공란부분
# cat $FILENAME | cut -f2 -d "/"
dir1
# cat $FILENAME | cut -f3 -d "/"
dir2
와 같이 사용할 수 있다.