나는 종종 rsync:link stat error
디렉토리가 존재하지 않는다고 말하고 명령에 지정된 시간보다 짧은 대신 원격 서버 폴더의 모든 파일을 복사하게 됩니다 find
. 간격 문제인지 또는 bash
대괄호를 해석하는 방법이 확실하지 않습니다. 때로는 잘 작동하는 경우도 있습니다.
주문하다:
rsync --no-perms --ignore-existing -vt --files-from=<(ssh admin@rig700 'find /usr/bin/rig/cache -mmin -720 -type f -exec basename {} \;') admin@rig700:/usr/bin/rig/cache /usr/bin/rig/store
답변1
의 하위 디렉터리에 있는 경우에도 basename
발견된 모든 파일을 명시적으로 호출합니다 . 이는 유사한 파일이 로 보고된다는 의미입니다 . 이 파일은 분명히 존재하지 않으므로 이에 대해 불만을 제기 하고 싶습니다 .find
/usr/bin/rig/cache
/usr/bin/rig/cache/subdir/myfile
myfile
--files-from=
rsync
/usr/bin/rig/cache
rsync
당신이 할 수 있는 것은 with -print0
대신에 사용하는 것입니다 .-exec basename {} \;
find
가득한\0
(nul) 문자로 구분된 발견된 모든 파일의 경로입니다 . 그런 다음 --files-from=
이 결과를 사용하여 --from0
null로 구분된 경로 이름 목록임을 지정합니다.
rsync
그런 다음 소스 경로로 사용하십시오 admin@rig700:
.
그래서 저는 여기서 두 가지를 제안합니다.
- 보고서를 구분하는 데 사용되는
\0
경로 이름find
(이것은오직경로 이름에 개행 문자가 허용되므로 Unix 시스템에서 경로 이름을 구분하는 데 사용하기에 안전한 문자입니다. - 복사해야 하는 파일의 전체 경로 이름을 보고
find
한 다음 이러한 경로를 있는 그대로rsync
.
마지막으로, 당신의 명령은
rsync -e 'ssh -q' --no-perms --ignore-existing -vt \
--from0 --files-from=<(
ssh -q admin@rig700 'find /usr/bin/rig/cache -mmin -720 -type f -print0'
) --no-relative admin@rig700: /usr/bin/rig/store
--no-relative
--no-R
읽는 경로 이름이 --files-from
절대 경로 이름으로 처리되도록 하려면 (or) 옵션이 필요합니다 . 이 옵션이 없으면 /usr/bin/rig/cache/somefile.txt
경로 이름의 첫 번째 문자(예:)가 /
제거되고 원격 호스트의 홈 디렉토리에 상대적이 됩니다.
또한 ( ) 옵션을 사용하여 원격 시스템에서 명령을 실행 ssh -q
했습니다 . 내가 이걸 하는 이유는find
-e
--rsh
rsync
원격 호스트가 환영 배너를 인쇄하는 것 같습니다.. 이 배너는 혼란스럽기 때문에 명령을 실행하든 를 rsync
실행하든 인쇄를 비활성화해야 합니다 .find
rsync
요약:
basename
발견된 파일을 실행하지 마십시오find
. 대신 원격 시스템에서 전체 경로를 가져--no-relative
와서rsync
.- 원격 호스트의 환영 배너가 인쇄되지 않는지 확인하십시오.