먼저 아래에 내 디렉토리 구조를 자세히 설명합니다.
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
.src
rsync
rsync -av src/* dst/
훌륭한. 디렉토리에 있는 파일에 행을 추가하면 src
동일한 명령이 해당 디렉토리의 변경 사항을 복사합니다 dst
.
1_2.txt
이제 목차에 추가 텍스트 줄을 추가합니다 dst
. 이 경우 src
및 dst
디렉토리는 동일하지 않습니다.
위의 명령을 실행하면 rsync
디렉토리의 해당 파일에서 추가 줄이 제거될 것 같습니다 dst
. 그러나 그것은 일어나지 않았습니다.
src
파일과 디렉토리를 동일하게 유지하려면 어떻게 해야 합니까dst
?디렉토리에 새 디렉토리/파일을 수동으로 추가하는 경우
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 패턴이 숨겨진 파일 이름으로 확장되지 않기 때문입니다. 그러나 소스 디렉터리의 하위 디렉터리에 있는 숨겨진 파일은 계속 복사됩니다.