rsync의 제외 옵션은 상대 경로만 허용한다는 것을 알고 있으므로 realpath --relative
.
$ls /usr/local/bin
cppman demangle e fusuma rem triangle
$realpath --relative-to=$PWD /usr/local/bin/cppman
../../usr/local/bin/cppman
$rsync -va --delete --exclude=$(realpath --relative-to=$PWD /usr/local/bin/cppman) /usr/local/bin /home/user1/Desktop/transport/
created directory /home/shepherd/Desktop/transport
bin/
bin/cppman
bin/demangle
bin/e
bin/fusuma
bin/rem
bin/triangle
sent 26,689 bytes received 189 bytes 53,756.00 bytes/sec
total size is 26,215 speedup is 0.98
보시다시피 파일 cppman
은아니요상대적이더라도 여전히 제외됩니다. 왜?
답변1
제외 경로는 현재 작업 디렉터리가 아닌 소스("전송 루트")를 기준으로 시작됩니다. bin
전송할 디렉터리이므로 경로는 다음과 같습니다 /bin/cppman
.
rsync -va --delete --exclude=/bin/cppman /usr/local/bin /home/user1/Desktop/transport/
또는 앵커가 없는 경우(인출선 없음 /
):
rsync -va --delete --exclude=bin/cppman /usr/local/bin /home/user1/Desktop/transport/
/usr/local/bin/cppman
두 개의 파일 과 가 있는 경우 /usr/local/bin/foo/bin/cppman
고정되지 않은 버전은 두 파일을 모두 제외하고 첫 번째 명령은 첫 번째 파일을 제외합니다.