rsync는 파운드 문자(#)로 시작하는 지정된 디렉터리를 제외하지 않습니다.

rsync는 파운드 문자(#)로 시작하는 지정된 디렉터리를 제외하지 않습니다.

#recyclersync를 사용하여 이 디렉터리를 제외 하려고 합니다 .

$ rsync -Hauv -h -P --exclude '#recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini  user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/subDir1/subDir2/
Extension_1/#recycle/subDir1/subDir2/BigVideo.mov
         39.23G  82%   36.40MB/s    0:03:44  ^C
$

(나도 옵션을 인용 .DS_Store*하고 제거하려고 시도했지만 --log-file아무런 차이가 없었습니다.)

CentOS 7.9 버전을 사용하고 있습니다 rsync.3.1.2 protocol version 31bash4.2.46(2)-release

좀 더 구체적으로 말하자면, 제외 목록이 포함된 변수가 포함된 아주 작은 스크립트를 작성했습니다.

$ rsyncExclusionOptions=$(printf -- "--exclude %s " "'#recycle/'" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude '*/#recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/TOEI_myEpisode.mov
          3.22G   5%  104.35MB/s    0:08:23  ^CKilled by signal 2.

rsync error: unexplained error (code 255) at rsync.c(638) [generator=3.1.2]
rsync: [generator] write error: Broken pipe (32)
rsync error: received SIGUSR1 (code 19) at main.c(1430) [receiver=3.1.2]

EDIT0: @roaima 또한 괄호 사이에 넣어 보았습니다 #(제공한 링크에서 제안한 대로).여기) 하지만 다음 중 하나도 작동하지 않습니다.

$ rsyncExclusionOptions=$(printf -- "--exclude %s " "'[#]recycle/'" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude '[#]recycle/' --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/
Extension_1/#recycle/SERIES/mySerie/SOURCES_HD59iDF/EPISODES_666-709/TOEI_myEpisode.mov
          4.04G   7%   21.67MB/s    0:39:45  ^CKilled by signal 2.

rsync error: unexplained error (code 255) at rsync.c(638) [generator=3.1.2]
rsync: [generator] write error: Broken pipe (32)
rsync error: received SIGINT, SIGTERM, or SIGHUP (code 20) at io.c(504) [receiver=3.1.2]
rsync: [receiver] write error: Broken pipe (32)

가능한 해결책:

  • 해시 값은 다음과 같이 괄호 사이에 배치되어야 합니다. [#]AND
  • '변수 [#]recycle내부의 제외 에는 extra를 사용할 수 없습니다 rsyncExclusionOptions.
$ rsyncExclusionOptions=$(printf -- "--exclude %s " "[#]recycle/" @eaDir/ "'.DS_Store*'" desktop.ini)
$ echo $rsyncExclusionOptions
--exclude [#]recycle/ --exclude @eaDir/ --exclude '.DS_Store*' --exclude desktop.ini
$ rsync -Hauv -h -P --skip-compress=$rsyncSkipCompressList $rsyncExclusionOptions user1@src_server:/volume2/Extension_1 /destination/dir/
receiving incremental file list
Extension_1/SERIES/mySerie/SOURCES_VF/EPISODES_700-765/

답변1

rsync버전 3.1.3 프로토콜 31에서는 원래 설명된 문제를 재현할 수 없다는 말로 이 질문에 대답하겠습니다 . (Raspbian GNU/Linux 10 "차단기".)

수정된 질문은 제외 목록이 올바르지 않으며 디렉터리 이름과 일치하지 않음을 보여줍니다. 패턴 이름에 작은따옴표를 넣었지만 디렉터리/파일 이름과 일치하지 않습니다. 따라서 제외되지 않습니다.

원래 답변은 아래에 계속됩니다.


#그러나 문제를 일으키는 파일 이름 과 함께 StackOverflow에 보고된 해결되지 않은 또 다른 인스턴스를 발견했습니다.rsync는 '#filename#' 파일 이름을 제외할 수 없습니다., 그래서 당신은 혼자가 아닙니다. 어쩌면 내가 실행 중인 최신 버전에서 문제가 해결되었을 수도 있습니다.

상상하다

mkdir -p /tmp/718113/Extension_1/#recycle/subDir1/subDir2
cd /tmp/718113
mkdir dst
touch Extension_1/#recycle/subDir1/subDir2/BigVideo.mov

지금 주문하세요

rsync -Hauv -h -P --exclude '#recycle/' --exclude '@eaDir/' --exclude '.DS_Store*' --exclude 'desktop.ini' localhost:/tmp/718113/Extension_1 /tmp/718113/dst

산출

receiving incremental file list
Extension_1/

sent 85 bytes  received 78 bytes  326.00 bytes/sec
total size is 0  speedup is 0.00

유일한 중요한 변경 사항은 쉘이 패턴을 확장할 기회가 없도록 제외 패턴을 인용했다는 것입니다(구체적으로는 그러나 배타적이지는 않음 '.DS_Store*'). 그러나 이 경우에도 문제가 발생하면 , rsync등 의 오류 메시지 를 받게 됩니다 Unexpected remote arg: localhost:/tmp/718113/Extension_1.rsync error: syntax or usage error (code 1) at main.c(1372) [sender=3.1.3]

--progress또한 (묵시적 -P)을 사용하지 않고 리디렉션하는 것이 좋습니다.표준 출력/표준 오류로그 파일에. 결과를 로그 파일에 기록하려면 다음 -P으로 바꾸 --partial거나 옵션을 사용하십시오 .--log

관련 정보