반달가면 이글루에서 백업 - http://bahndal.egloos.com/608167
우선, curl을 이용한 ftp 자동접속 방법의 기본적인 내용(파일 업로드/다운로드/삭제, 디렉토리 생성/삭제 등)은 이전 게시물을 참고하자. 여기로
업로드한 파일, 또는 이미 FTP서버에 존재하는 파일의 이름을 바꾸는 방법이다. FTP에서 이름을 변경하는 절차는 RNFR 명령으로 변경 대상 파일을 지정한 후에, RNTO 명령으로 새로운 이름을 설정하는 형태다. 여기서 파일명은 절대경로를 사용해야 함에 유의.
curl의 -Q 옵션으로 이름 변경 명령어를 전달하면 된다. 아래의 예시를 보자.
# /my_dir/documents/에 있는 my_file.dat를 my_file.mod.dat로 이름 변경
curl ftp://ftp.myserver.com --user ftp_user -Q "RNFR /my_dir/documents/my_file.dat" -Q "RNTO /my_dir/documents/my_file.mod.dat"
스크립트 안에서 사용할 경우 화면 출력이 없어야 깔끔하다면 -s 옵션으로 전송상태 표시 등을 출력하지 않도록 하고, FTP 접속후 기본으로 나오는 파일 목록 출력을 /dev/null로 리다이렉션(redirection)하여 없애면 되겠다. 이 경우에는 화면에 아무것도 나오지 않으므로 curl의 --user 옵션에 사용자 계정뿐만 아니라 접속암호도 같이 보내주는 것이 좋겠다. (보안 측면에서 문제가 없다는 가정하에서다. 스크립트나 명령어의 인자에 암호가 들어가는 경우에는 반드시 문제가 없는지 검토하자!)
# 화면 출력 억제 : -s 옵션 추가 및 리다이렉션
curl ftp://ftp.myserver.com --user "ftp_user:ftp_password" -Q "RNFR /my_dir/documents/my_file.dat" -Q "RNTO /my_dir/documents/my_file.mod.dat" -s > /dev/null
이름 바꾸기는 파일을 성공적으로 업로드했는지 서버측에서 확인할 수 있도록 할 때 편리하다. 파일을 올릴때 이름을 파일명.part로 해서 올리고, 전송완료 이후 원래 파일명으로 변경해 주는 식이다. 아래의 스크립트 예제를 참고하자.
# 사용자 계정 및 암호를 입력 받아 변수 user, password에 할당
echo "사용자 계정을 입력하세요"
read user
echo "암호를 입력하세요"
read password
# data.doc 파일의 이름을 data.doc.part로 변경
mv data.doc data.doc.part
# data.doc.part 파일 업로드
curl ftp://ftp.myserver.com/my_dir/documents/ --user "$user:$password" -T data.doc.part
# 오류 발생 확인
if [[ $? -eq 0 ]]
then echo "파일 전송 완료. FTP서버측 파일명에서 .part를 없앱니다."
curl ftp://ftp.myserver.com --user "$user:$password" -Q "RNFR /my_dir/documents/my_data.doc.part" -Q "RNTO /my_dir/documents/my_data.doc" -s > /dev/null
else echo "오류가 발생했습니다!"
fi
# 파일 이름을 원래대로
mv data.doc.part data.doc
'bash script' 카테고리의 다른 글
[bash: while, if] 복잡한 조건에 따른 개별 작업 이후 공통된 작업이 있는 경우 (0) | 2023.08.29 |
---|---|
리눅스 bash 스크립트에서 연관 배열(associative array) 사용하기 (0) | 2023.08.23 |
[bash: sed] 16진수값(hex) 대체하기 (0) | 2023.08.23 |
[bash: if, grep] 특정 문자열의 존재유무에 따른 작업 지정하기 (0) | 2023.08.23 |
[bash: awk] awk에서 필드 구분자를 지정할 때 "escape sequence" 관련 경고 메시지 발생 (0) | 2023.08.23 |