rsync는 대상에서 중복 라인을 제거합니다.

rsync는 대상에서 중복 라인을 제거합니다.

먼저 아래에 내 디렉토리 구조를 자세히 설명합니다.

src
   1
     1_1.txt
        test_line1
     1_2.txt
        test_line1
   2
     2_1.txt
        test_line1
     2_2.txt
        test_line1

이 디렉터리를 디렉터리 src와 동기화합니다 . dst이제 디렉토리는 다음 명령을 사용하는 것과 동일합니다 dst.srcrsync

rsync -av src/* dst/

훌륭한. 디렉토리에 있는 파일에 행을 추가하면 src동일한 명령이 해당 디렉토리의 변경 사항을 복사합니다 dst.

1_2.txt이제 목차에 추가 텍스트 줄을 추가합니다 dst. 이 경우 srcdst디렉토리는 동일하지 않습니다.

위의 명령을 실행하면 rsync디렉토리의 해당 파일에서 추가 줄이 제거될 것 같습니다 dst. 그러나 그것은 일어나지 않았습니다.

  1. src파일과 디렉토리를 동일하게 유지하려면 어떻게 해야 합니까 dst?

  2. 디렉토리에 새 디렉토리/파일을 수동으로 추가하는 경우 dst명령을 실행할 때 디렉토리/파일을 삭제할지 묻는 메시지가 표시됩니다 rsync. 어떻게 해야 하나요?

답변1

나는 당신이 본 것과 같은 행동을 재현할 수 없습니다:

$ tree
.
|-- d
|   `-- file
`-- s
    `-- file

2 directories, 2 files
$ cat s/file
hello
$ rsync -av s/ d
sending incremental file list

sent 63 bytes  received 12 bytes  150.00 bytes/sec
total size is 6  speedup is 0.08

데이터가 전송되지 않으며 두 파일이 이미 동일합니다.

$ echo world >>d/file
$ cat d/file
hello
world
$ rsync -av s/ d
sending incremental file list
file

sent 116 bytes  received 35 bytes  302.00 bytes/sec
total size is 6  speedup is 0.04
$ cat d/file
hello

이는 대상 디렉토리의 파일에 추가된 행이 를 다시 실행하면 제거됨을 나타냅니다 rsync -a.


소스 디렉터리에서 사용할 수 없는 대상의 파일을 삭제하려면 다음을 사용하세요 --delete.

$ tree
.
|-- d
|   |-- extra_file
|   `-- file
`-- s
    `-- file

2 directories, 3 files
$ rsync -av --delete s/ d
sending incremental file list
deleting extra_file
./

sent 66 bytes  received 29 bytes  190.00 bytes/sec
total size is 6  speedup is 0.06
$ tree
.
|-- d
|   `-- file
`-- s
    `-- file

2 directories, 2 files

rsync유틸리티는 대상에서 파일을 삭제하기 전 대화형 확인 메시지를 기본적으로 지원하지 않습니다. 그러나 먼저 실행 --dry-run하고 실제로 복사본을 실행하면 어떤 일이 발생하는지 확인할 수 있습니다.


rsync -av s/* d또한 대신 사용하면 rsync -av s/ d소스 디렉터리의 숨겨진 파일이나 디렉터리가 복사되지 않습니다. 이는 *기본적으로 glob 패턴이 숨겨진 파일 이름으로 확장되지 않기 때문입니다. 그러나 소스 디렉터리의 하위 디렉터리에 있는 숨겨진 파일은 계속 복사됩니다.

관련 정보