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