bash script2023. 7. 19. 08:44

 

반달가면 이글루에서 백업 - 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

비슷한 디렉토리 구조를 가진 여러개의 서버에 대해 동시에 작업하고 싶을 때 편리하게 이용할 수 있다.

 

728x90
Posted by 반달가면