불특정 파일리스트 FTP 전송 스크립트

2011.02.18 02:24

ischo 조회 수:14257

원문 : 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

 

와 같이 사용할 수 있다.

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [공지] 게시자료 열람자유. 불펌금지입니다. 조인상 2010.12.07 31472
44 파이프를 이용한 tar와 gzip 동시에 처리하기 ischo 2011.05.19 12182
43 리눅스에서 2TB 이상의 파티션 만들기 ischo 2011.04.11 12369
42 bonding 네트워크 설정 ischo 2011.03.30 15690
41 텍스트파일의 내용을 순차적으로 읽어들이는 스크립트 ischo 2011.03.29 17708
» 불특정 파일리스트 FTP 전송 스크립트 file ischo 2011.02.18 14257
39 시스템 관리자를 위한 50가지 비법 조인상 2011.01.04 12280
38 Linux Performance and Tuning Guidelines - IBM file ischo 2010.11.17 9897
37 HOW TO SELinux file ischo 2010.11.17 9400
36 CentOS에 zabbix 1.8.2 install secret 조인상 2010.07.27 2
35 case로 만드는 오라클 서비스 관리 ksh 스크립트 예제 ischo 2010.06.18 13556
34 리눅스환경에서 RedOwl 정지시키기 조인상 2010.05.27 14657
33 LVM 사용하여 추가한 디스크로 볼륨 늘리기 ischo 2010.05.19 35898
32 vsftpd 포트변경 방법 조인상 2010.05.12 14944
31 파일로 스왑추가 방법 조인상 2010.05.12 11166
30 ssh 자동로그아웃 설정방법 조인상 2010.05.12 41637
29 xinetd 모드로 proftpd 변경 조인상 2010.05.12 12427
28 [펌] 리눅스에서의 시리얼통신 조인상 2010.05.12 20111
27 tar 를 이용한 테잎 백업스크립트 예 조인상 2010.05.12 11062
26 랜카드 동작속도 확인/수정 방법 조인상 2010.05.12 29551
25 sendmail 25번포트 접속이 localhost에서만 허용될때 조인상 2010.05.12 17099
서버에 요청 중입니다. 잠시만 기다려 주십시오...