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

2011.02.18 02:24

ischo 조회 수:14205

원문 : 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 31070
104 CentOS 6.5 환경에서 Multipath 구성하기 - 작성중 secret ischo 2014.08.05 0
103 CentOS에 zabbix 1.8.2 install secret 조인상 2010.07.27 2
102 [Shell] 시작한지 1시간 이상 경과한 프로세스 kill 하기 ischo 2022.06.16 337
101 파일시스템 사용량 추이를 http 전송으로 DB에 누적하기 file ischo 2022.08.29 834
100 Rocky 9+nginx1.20+php8+MariaDB 10.5 환경에서 wordpress 설치하기 ischo 2024.01.10 838
99 Multi Putty Manager file ischo 2020.10.08 974
98 named 에서 DNS root 서버 리스트 갱신하기 ischo 2023.06.13 985
97 파일시스템 양방향 동기화하기 - rsync, lsyncd file ischo 2024.01.03 1058
96 LVM 타입 swap 영역 용량 축소하기 ischo 2023.11.28 1068
95 apache log4j 취약점 제거조치 CVE-2021-44228 CVE-2021-45046 CVE-2021-41045 CVE-2021-4104 ischo 2021.12.23 1157
94 vi 에디터에서 복사,붙여넣기 하면 # 마크가 자동으로 앞에 붙을때 ischo 2023.04.19 1181
93 구버전 Linux에서 Rocky Linux 9.1 버전으로 ssh 접속시 "no hostkey alg" 표시후 접속불가 ischo 2023.04.19 1734
92 CentOS 7에 Apache2, php7.3, MariaDB 설치하기 ischo 2019.09.02 2015
91 CIDR Conversion Table ischo 2018.03.08 3029
90 리눅스에서 Windows Filesystem(NTFS) 마운트하기 ischo 2018.12.20 3729
89 (스크립트) 오라클 DB서버에서 매일 원격지 FTP로 export 파일 업로드 하기 ischo 2017.11.04 4401
88 apache 404 에러에 OS 또는 apache버전을 표시하는 취약점 없애기 ischo 2016.10.25 7759
87 APM 설치하기 조인상 2010.05.12 8098
86 SFTP로 자동 업로드/다운로드 스크립트 ischo 2018.04.04 8423
85 iptables로 NAT + Portforwarding 구성하기 조인상 2010.05.12 8689
서버에 요청 중입니다. 잠시만 기다려 주십시오...