이번 글에서는 linux 환경에서 sftp를 활용하여 여러 파일을 가져오는 쉘을 만들어 볼 것이다.
해당 쉘을 정상적으로 수행시키기 위해서는 쉘 수행 서버에서 원격지 서버로 비밀번호 없이 sftp 접속이 가능하도록 설정해줘야 한다(예를 들면 ssh-keygen 등록 등)
1. 쉘 실행 순서
1) 동일 이름의 쉘 동시수행 체크
2) 파일 리스트 추출(아래 쉘에서는 FILE이라는 이름으로 시작하는 txt 파일 추출)
3) 파일 리스트를 sftp 명령어를 수행해서 원격 디렉토리에서 로컬 디렉토리로 가져옴
2. 쉘 스크립트 내용
#!/bin/bash
TODAY=`date +%Y/%m/%d-%H:%M:%S`
REMOTE_ADDR="[원격지 IP 주소]"
REMOTE_USER=[원격지 유저ID]
REMOTE_DIR="[파일이 존재하는 원격지 디렉토리]"
LOCAL_DIR="[파일을 가져올 로컬 디렉토리]"
echo $TODAY
echo sftp shell start
# 쉘 동시수행 체크(쉘 이름 : /home/user1/shell/get_file.sh)
SHELL_EXEC=`ps -ef | grep "/bin/sh -c [해당 쉘 절대경로(예 : /home/user1/shell/get_file.sh)]" | grep -v grep | grep -v vi | wc -l`
if [ "$SHELL_EXEC" -gt 1 ] # 자기 자신을 제외한 shell 수행 시
then
echo shell is already running. end.
exit 0
fi
# 파일 리스트 추출 (FILE_*.txt 파일)
FILES=`sftp -b - $REMOTE_USER@REMOTE_ADDR <<EOF
cd $REMOTE_DIR
ls FILE_*.txt
EOF`
# 파일 존재여부 확인 후 미존재 시 종료
FILES=`echo $FILES|sed "s/.*sftp> ls FILE_\*.txt//"`
if [ ! -n "$FILES" ]
then
echo remote file not exists. end.
exit 0
else
echo FILES : ${FILES}
fi
# SFTP 연동하여 파일들을 가져온 후, 원격 서버에 남아있는 파일을 ./backup 디렉토리로 옮김
(
echo cd $REMOTE_DIR
echo lcd $LOCAL_DIR
for FILE in $FILES; do
echo get $FILE
echo rename $FILE $REMOTE_DIR/backup/$FiLE
done
) | sftp -b - $REMOTE_USER@$REMOTE_ADDR
echo sftp shell success end.
echo "-----------------------"
exit 0
이상이다.
'IT > Linux' 카테고리의 다른 글
[에러 해결]ssh_exchange_identification: read: Connection reset by peer 에러 해결 (4) | 2021.03.22 |
---|---|
리눅스 scp를 활용한 원격 파일 전송 (0) | 2020.10.25 |
리눅스 명령 프롬프트 변경하기 (0) | 2020.10.22 |
파일 디스크립터(File Descriptor) 란 무엇인가? (6) | 2020.03.25 |
리눅스 모듈 관리(lsmod, modprobe, modinfo) (0) | 2020.01.03 |
댓글