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

2011.02.18 02:24

ischo 조회 수:14179

원문 : 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 30768
44 아파치. 톰캣 연동 (apache+tomcat by mod_jk) ischo 2012.04.18 17336
43 DNS 기초에서 보안까지 조인상 2012.07.26 11423
42 apache log rotate 시키기 ischo 2012.08.14 17151
41 kill 명령어로 줄수 있는 interrupt list ischo 2012.08.17 12530
40 key 저장을 이용하여 ssh,sftp 자동로그인 하기 ischo 2012.10.17 18000
39 쉘스크립트에서 응용가능한 date 포맷 ischo 2012.10.18 15027
38 unzip 으로 압축해제시 하위디렉토리 만들어서 압축풀기 ischo 2012.11.14 16426
37 top을 이용한 성능데이터 로깅 ischo 2013.01.13 17575
36 Linux용 nmon 설치 및 구성 file ischo 2013.01.17 29159
35 다수의 파일에서 ^M 문자를 모두 없애는 쉘스크립트 ischo 2013.05.09 19275
34 리눅스에서 hostid 란? ischo 2013.06.25 29175
33 file descriptor 설정하기 ischo 2013.07.10 24076
32 static routing 정보 저장하여 재부팅시에도 자동 적용 ischo 2013.07.23 25397
31 putty Connection Manager file ischo 2014.02.26 11202
30 ubuntu 에서 /boot 파일시스템 full 날 경우 이미지 삭제방법 ischo 2014.05.12 14070
29 CentOS 6.4 에서 Apache 2.4버전 RPM build 하기 file ischo 2014.07.29 14852
28 CentOS 6.5 환경에서 Multipath 구성하기 - 작성중 secret ischo 2014.08.05 0
27 XDMCP 연결시 필요한 port 번호 ischo 2014.12.24 17579
26 HP DL/ML 시리즈용 SmartArray CLI 유틸리티 사용 설명서 ischo 2015.02.11 10606
25 OpenSSL 다중취약점 보안업데이트 [1] ischo 2015.04.02 13887
서버에 요청 중입니다. 잠시만 기다려 주십시오...