
내가 취한 단계는 다음과 같습니다.
몇 가지 테스트 파일을 만듭니다.
/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
말라고 말한 후에 . [강조 광산] 에서 :rsync
src/.test1
man 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