Rsync --delete 옵션이 대상의 숨겨진 도트 파일을 삭제하지 않습니다.

Rsync --delete 옵션이 대상의 숨겨진 도트 파일을 삭제하지 않습니다.

내가 취한 단계는 다음과 같습니다.

몇 가지 테스트 파일을 만듭니다.

/tmp $ mkdir src tgt
/tmp $ cd src/
/tmp/src $ touch .test{1,2,3}
/tmp/src $ ls -la
total 0
drwxr-xr-x   5 user  wheel  170 18 Aug 15:02 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test1
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3

src 및 tgt 디렉터리를 동기화합니다.

/tmp/src $ cd ..
/tmp $ rsync -avh --delete --progress src/.??* tgt
building file list ...
3 files to consider
.test1
           0 100%    0.00kB/s    0:00:00 (xfer#1, to-check=2/3)
.test2
           0 100%    0.00kB/s    0:00:00 (xfer#2, to-check=1/3)
.test3
           0 100%    0.00kB/s    0:00:00 (xfer#3, to-check=0/3)

sent 209 bytes  received 86 bytes  590.00 bytes/sec
total size is 0  speedup is 0.00
/tmp $ ls -la tgt/
total 0
drwxr-xr-x   5 user  wheel  170 18 Aug 15:03 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test1
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3

src에서 파일을 삭제하고 다시 동기화합니다.

/tmp $ rm -rf src/.test1
/tmp $ ls -la src/
total 0
drwxr-xr-x   4 user  wheel  136 18 Aug 15:03 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3
/tmp $ rsync -avh --delete --progress src/.??* tgt
building file list ...
2 files to consider

sent 75 bytes  received 20 bytes  190.00 bytes/sec
total size is 0  speedup is 0.00
/tmp $ ls -la tgt/
total 0
drwxr-xr-x   5 user  wheel  170 18 Aug 15:03 .
drwxrwxrwt  11 root       wheel  374 18 Aug 15:02 ..
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test1
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test2
-rw-r--r--   1 user  wheel    0 18 Aug 15:02 .test3

.test1 파일이 tgt 디렉터리에서 삭제되지 않았습니다.

이 경우 --delete 옵션이 작동하지 않는 이유는 무엇입니까?

대상에서 숨겨진 파일을 삭제하는 rsync 명령을 어떻게 얻나요?

답변1

숨김 파일과는 아무런 관련이 없습니다. 당신이 전혀 신경 쓰지 rm말라고 말한 후에 . [강조 광산] 에서 :rsyncsrc/.test1man 1 rsync

--delete
이는 rsync수신 측에서 불필요한 파일(송신 측에 없는 파일)을 삭제하라는 의미입니다.동기화되는 디렉터리에만 해당됩니다. 디렉토리 내용(예: ) 에 와일드카드를 사용하지 않고 rsync전체 디렉토리(예: dir또는 )를 보내도록 요청했어야 합니다.dir/dir/*와일드카드는 셸에 의해 확장되므로 rsync파일의 상위 디렉터리가 아닌 개별 파일을 전송하라는 요청을 받기 때문입니다. […]

개별 파일이 아닌 디렉터리 동기화:

rsync -avh --delete --progress src/ tgt

답변2

비결은 @Kamil Maciorowski가 언급한 것처럼 디렉터리를 동기화하는 것뿐 아니라 포함 및 제외 필터를 사용하여 처음에 도트 파일만 동기화하는 것입니다.

rsync -avh --delete --progress --include '.*' --exclude '*' src/ tgt

답변3

제 경우에는 추가하면 --ignore-errors문제가 해결되었습니다.

자세한 내용: cygwin을 사용하여 Linux 서버에서 Windows USB 드라이브로 복사합니다.

소스는 server:/src이고 대상은 입니다 /cygdrive/e.

이전 rsync 실행에서 숨겨진 파일이 남아 있었습니다. 파일 이름은 다음과 같았습니다..data.qpSS6L

다음 명령을 실행하면~ 아니다파일을 삭제하십시오:

rsync -rvvth --update server:/src /cygdrive/e --delete

다음은 --ignore-errors를 추가하고 숨겨진 파일을 올바르게 삭제했습니다.

rsync -rvvth --update server:/src /cygdrive/e --delete --ignore-errors

관련 정보