rsync: --files-from=FILE을 사용할 때 --archive가 --recursive를 의미하지 않는 이유는 무엇입니까?

rsync: --files-from=FILE을 사용할 때 --archive가 --recursive를 의미하지 않는 이유는 무엇입니까?

-r또는을 사용하면 디렉토리로 재귀가 --recursive발생합니다 . 또는 와 같음을 의미합니다 .rsync-a--archive-rlptgoD-a-r

디렉토리가 있고 source/다음 dest/을 실행하는 경우:

rsync source dest

그런 다음 아무것도 rsync건너뛰고 source/복사하지 마세요. 내가 실행하면 :

rsync -a source dest

그런 다음 모든 내용을 -a힌트 하고 복사하십시오 .-rrsyncsource/dest/

list.txt그러나 해당 줄이 포함된 파일이 있고 source내 디렉터리의 전체 경로가 이면 source/다음 /home/user/source/을 실행합니다.

rsync -a --files-from=list.txt /home/user/ dest

그런 다음 내용 rsync만 복사 source/하고 dest/내용은 복사하지 않습니다. 옵션 없이 명령을 실행해도 같은 일이 발생합니다 -a.

하지만 동일한 명령을 실행하면 다음과 같습니다 -r.

rsync -r --files-from=list.txt /home/user/ dest

그런 다음 rsync모든 내용을 .source/dest/

내 질문은 다음과 같습니다

  • 이 옵션을 언제 사용해야 하는지 -a힌트를 주지 않겠습니까 ? 이것이 예상되는 동작입니까?-r--files-from=FILE
  • 이 명령은 디렉토리이고 사용되거나 사용되지 않기 때문에 아무것도 rsync source dest건너뛰고 source/복사하지 않는다는 점을 감안할 때 명령이 여전히 에 복사하는 이유는 무엇입니까 ?source/-a-rrsync --files-from=list.txt /home/user/ destsource/dest/
  • 이 옵션을 사용할 때 -a암시된 다른 옵션은 여전히 ​​유효합니까? --files-from=FILE남은 -r유일한 옵션입니까?

편집하다:man페이지를 좀 더 주의 깊게 읽어봐야 할 것 같습니다 . 옵션 설명 아래에 다음과 --files-from=FILE같이 나와 있습니다.

--archive(-a) 옵션의 동작은 --recursive(-r)를 의미하지 않으므로 필요한 경우 명시적으로 지정합니다.

(내 첫 번째 질문에 대답합니다.)

--dirs (-d) 옵션이 암시되어 있습니다. 이 옵션은 대상 목록을 크게 건너뛰는 대신 대상 목록에 지정된 디렉터리를 생성합니다(이 옵션을 끄려면 --no-dirs 또는 --no-d 사용).

(두 번째 질문에 답합니다.)

답변1

-a,--archive

이것은 와 동일합니다 -rlptgoD. 이는 재귀적이고 거의 모든 것을 보존하고 싶다는 것을 표현하는 빠른 방법입니다( -H 한 가지 중요한 생략을 사용). 위 동등성에 대한 유일한 예외는 그것이 --files-from명시될 때인데, 이 경우 그것은 -r 암시적이지 않습니다.

재귀를 사용하면 --files-from비활성화됩니다(이 옵션은 누락된 유일한 옵션입니다). 사용자는 전송하려는 특정 파일이 무엇인지 정확히 알고 있으며 에서 사용되는 파일 목록에 해당 파일을 지정했다고 가정합니다 --files-from.

파일 목록에 디렉터리가 지정되면 해당 디렉터리의 소유권, 타임스탬프 등은 동기화되지만 내용은 동기화되지 않습니다.

-r그러나 다음과 같이 플래그를 명시적으로 추가 할 수 있습니다 .

rsync -av --files-from=file.list -r src/ dst/

그러면 원하는 효과가 나타납니다.

관련 정보