쉘 스크립트 문의 드립니다.

Mabuk의 이미지

리눅스 초보자 입니다.
회사 일로 쉘 스크립트를 작성해야 하는데..
문제는 제가 거의 아는 것이 없습니다...ㅜㅜ

작성해야 할 스크립트는...이겁니다..

FTP를 통해서 지정 폴더에 파일이 들어옵니다. (파일 이름은 시간으로 표시되어집니다. ex) YYYYMMDD_HHMMSS.txt)
그러면 지정 폴더에 들어온 (생성된) 파일을 Import 를 시켜주어야 합니다. (명령어는 지정되어져 있습니다.)
Import를 시키고 나면, 해당 파일은 다른 폴더로 이동 시킵니다. (백업 하는 거죠..)

이런 내용을 .sh 파일을 작성하고 해당 .sh 파일을 Crontab에서 일정 주기로 돌릴 예정입니다..

여기저기 찾아보고 했는데 워낙 기초가 없는데다가..시간이 촉박하니.. 머리만 복잡해지네요.ㅠㅠ

고수님들의 따뜻한 손길 부탁드립니다..

익명 사용자의 이미지

crontab -e

01 */1 * * * /where/script.sh > $HOME/script.log 2>&1

매시간 01분에 script.sh 실행 및 홈 디렉토리에 로그 생성

==== script.sh ====

#!/bin/bash

WORK_DIR="파일이 들어오는 지정 폴더"
BACKUP_DIR="백업 폴더"

cd $WORK_DIR

for x in `ls *.txt`; do
IMPORT_CMD $x
mv $x $BACKUP_DIR/$x
done

chanik의 이미지

저도 거의 같은 방식의 cron 작업을 만들어 쓰고 있습니다. 제가 겪은 시행착오를 바탕으로,
익명님이 올려주신 스크립트에서 세 군데의 내용을 수정/추가해봤으니 참고하시기 바랍니다.

#!/bin/bash
 
WORK_DIR="파일이 들어오는 지정 폴더"
BACKUP_DIR="백업 폴더"
 
# [1] 업로드된 파일이 없을 경우 와일드카드(*.txt)가 확장되지 않기 때문에
#     '*.txt'가 파일명으로 간주되어 for loop이 동작하게 되는 문제 해결.
shopt -s nullglob
 
cd $WORK_DIR
 
# [2] `ls *.txt` 식으로 처리하면, 와일드카드(*.txt)가 확장되지 않을때 문제가 생길 수 있음.
#     nullglob 설정시 `ls` 가 되므로 와일드카드와 무관하게 디렉토리 내의 모든 파일에 대해 loop 실행되는 문제 발생.
for x in *.txt; do
  IMPORT_CMD $x
  # [3] IMPORT 명령 성공시에만 백업폴더로 이동시킴. TODO: IMPORT 명령 오류코드 확인
  [ $? -eq 0 ] && mv $x $BACKUP_DIR/$x
done