본문 바로가기

운영체제

[DOS/WINDOWS]파일을 압축하고 FTP 명령을 통해 전송하는 배치파일 작성하기


Windows서버나 Linux서버.. 혹은 HPUX, AIX, Solaris 등 서버 시스템을 운영하다 보면 이런 저런 쉘 스크립트나 배치파일을 작성해야 할 일이 종종 생기게 마련이다. 

그렇다보니 쉘 스크립트나 배치파일을 코딩(스크립트를 코딩이라 해야 할진 모르겠지만..)을 할 줄 모르는 엔지니어는 수명이 연봉협상이나 이직 시 손해를 볼 각오를 해야한다. 

그 중에서 이 서버에서 저 서버로 파일의 전송을 자동화해야 하는 경우에는 스크립트 안에 FTP 명령어를 사용하도록 해야 한다.

아래의 예제는 DOS의 배치스크립트를 이용해 특정 폴더에 생성된 파일들을 실행되는 날짜를 파일명에 포함하는 압축파일로 묶어 다른 서버로 FTP를 이용하여 전송하는 스크립트다.

다른 부분은 배치파일을 작성하는 방법을 알고 있었지만 다음의 두가지는 방법을 찾아야 했다.

 1. 폴더내의 파일들을 하나의 파일로 묶는 방법

 2. 생성할 압축파일의 파일명에 오늘 날짜를 포함하도록 하는 방법

파일을 하나로 묶는 법은 유로 압축파일 프로그램을 이용하면 되지만 압축프로그램을 정품으로 구매하여야 하기에 비용부담이 있고 명색이 공공기관에서 불법S/W를 사용할 수는 없었다.  방법을 찾아보니 마이크로소프트에서 제공하는 CAB 파일포맷으로 파일들을 압축해주는 공개소프트웨어를 구할 수 있었다. 당연히 설치는 필요없는 단일 파일로 된 명령행 프로그램이다.

파일명에 날짜를 포함시키는 것은 DOS BATCH 파일을 거의 작성해본적이 없어 쉽지 않았다. 하지만 도스에서 사용해본적이 있는 date 명령과 time 명령에 에 /t 옵션을 주면 오늘날짜와 시간을 출력해주는 것을 이용해 해결할 수 있었다.

결국 다음과 같은 BATCH 파일을 작성하였고 Windows의 작업 스케줄러에 등록하여 주기적으로 생성된 파일들을 하나의 CAB 파일로 압축하여 다른 서버로 백업할 수 있었다.

-------------------------------------------------------------------------------

 for /F "tokens=1" %%a in ('date /t') do set DATE_TODAY=%%a
for /F "tokens=1" %%a in ('hostname') do set HOSTNAME=%%a

set yy=%DATE_TODAY:~0,4%
set mm=%DATE_TODAY:~5,2%
set dd=%DATE_TODAY:~8,2%

 SET FILENAME=%HOSTNAME%-%yy%%mm%%dd%.cab

 echo %FILENAME%
echo %HOSTNAME%

 d:

cd files

 cabarc -r -p N %FILENAME% *.*

echo open 192.168.2.136 > upload.txt
echo user account 123456>> upload.txt
echo bin >> upload.txt
echo prompt off >> upload.txt
echo cd %HOSTNAME% >> upload.txt
echo put %FILENAME%  >> upload.txt
echo quit >> upload.txt


c:\windows\system32\ftp -v -n -s:upload.txt

 del /F /S /Q /A .

rmdir /S /Q .