반달가면 이글루에서 백업 - http://bahndal.egloos.com/586775
우선, curl을 이용한 ftp 자동 접속 방법은 이전 게시물을 참고하자. 여기로
우선 ftp.myserver.com 서버의 /my_dir/ 디렉토리에 파일 memo.txt, image.jpg, data.bin 이렇게 파일 세개를 업로드하는 상황을 생각해 보자. 사용자 계정은 ftp_user, 암호는 ftp_pw라고 가정한다. 스크립트를 만들 경우에는 아래와 같이 for 반복문으로 간편하게 해결할 수 있다.
for file in memo.txt image.jpg data.bin
do
curl ftp://ftp.myserver.com/my_dir/ --user ftp_user:ftp_pw -T "$file"
done
그러나 curl에서 제공하는 기능을 이용해서 아래와 같이 하나의 명령어로 해결할 수도 있다. -T 옵션으로 업로드할 파일을 지정할 때 중괄호({})와 쉼표를 이용하게 된다.
# 파일 3개 업로드. {memo.txt,image.jpg,data.bin} (쉼표 사이에 공백 없음)
curl ftp://ftp.myserver.com/my_dir/ --user ftp_user:ftp_pw -T "{memo.txt,image.jpg,data.bin}"
-T 옵션의 인자에서 쉼표(,) 사이에 공백이 없음에 유의하자. 공백이 있을 경우 공백도 파일명의 일부로 해석하게 된다. 또한 bash에서 중괄호와 쉼표를 임의로 해석하여 처리하는 것을 방지하기 위해 따옴표(")를 사용한다는 점도 유의하자.
확장자만 다른 경우에는 아래와 같이 하면 된다. memo.txt, memo.dat, memo.jpg 이렇게 파일 세개를 업로드하는 경우이다.
# 파일 3개 업로드. 확장자만 다름
curl ftp://ftp.myserver.com/my_dir/ --user ftp_user:ftp_pw -T "memo.{txt,dat,jpg}"
파일명이 수자로 구분되어 있다면 대괄호([])를 사용하는 방법도 있다. memo01.txt에서 memo21.txt까지 업로드할 경우 아래의 예시와 같다.
# 파일 21개 업로드. memo01.txt ~ memo21.txt
curl ftp://ftp.myserver.com/my_dir/ --user ftp_user:ftp_pw -T "memo[01-21].txt"
마찬가지로 서버나 디렉토리에 대해서도 같은 형태를 적용할 수 있다. 아래의 예시를 보자.
# 디렉토리 my_dir_a, my_dir_b, my_dir_c에 각각 memo.txt 업로드
curl "ftp://ftp.myserver.com/my_dir_{a,b,c}" --user ftp_user:ftp_pw -T memo.txt
# ftp.myserver.com, ftp.yourserver.com의 /my_dir/ 디렉토리에 memo.txt 업로드
curl "ftp://ftp.{myserver,yourserver}.com" --user ftp_user:ftp_pw -T memo.txt
비슷한 디렉토리 구조를 가진 여러개의 서버에 대해 동시에 작업하고 싶을 때 편리하게 이용할 수 있다.
'bash script' 카테고리의 다른 글
[bash: read] read 명령의 요긴한 옵션 몇가지 (0) | 2023.07.19 |
---|---|
[bash: sed] sed에서 영역 구분을 이용한 문자열 재구성 작업 (역슬래시-괄호) (0) | 2023.07.19 |
[bash: grep] 바이너리 파일에서 16진수(hex) 데이터 검색하기 (0) | 2023.07.14 |
[bash: awk] awk에서 출력할 문자열을 변수로 지정하기 (0) | 2023.07.14 |
[bash: curl] curl을 이용한 FTP 자동 접속 (0) | 2023.07.11 |