RSYNC: 여러 파일 제외

RSYNC: 여러 파일 제외

두 디렉터리를 동기화하고 일부 파일을 제외하고 싶습니다. 아래 코드를 시도했지만 제외가 실패했습니다.

FILES=abc.zip,hh.sh,Workarea/test/hi.jpg
rsync -av --exclude={$FILES} /home/test/ /home/test2

그것을 확인하기 위해 다음과 같이 실행했습니다.

# sh -x test.sh
+ FILES=abc.zip,hh.sh,Workarea/test/hi.jpg
+ rsync -av '--exclude={abc.zip,hh.sh,Workarea/test/hi.jpg}' /home/test/ /home/test2

답변1

bash확장을 {a,b,c}리터럴 이외의 다른 것으로 사용할 수 없습니다 (변수에 넣거나 변수에 직접 확장할 a,b,c수도 없습니다 {a,b,c}. 가능 eval하지만 이로 인해 예상치 못한 합병증이 많이 발생하므로 권장하지 않습니다.

FILES=abc.zip,hh.sh,Workarea/test/hi.jpg
eval rsync -av --exclude={$FILES} /home/test/ /home/test2    # Don't do this!

모든 게 괜찮아

bash제외 세트를 저장하기 위해 배열 기능을 사용하는 더 나은 대안 제안은 다음과 같습니다 . 그런 다음 rsync이를 반복하여 명령줄을 작성합니다.

files=(abc.zip hh.sh Workarea/test/hi.jpg "Some file with a space in its name")

excludes=()
for f in "${files[@]}"
do
    excludes+=(--exclude "$f")
done
rsync -av "${excludes[@]}" /home/test/ /home/test2

관련 정보