명령을 사용하여 rsync
변경된 파일/폴더를 대상 폴더에 복사/동기화하고 싶습니다. 명령을 실행할 때마다 Rsync와 같은 문제가 발생하며 rsync
명령도 타임스탬프와 함께 복사됩니다.
예를 들어, 내 대상 폴더 "Linux"가 1개월 전에 업데이트되었고 내 소스 폴더에 "Linux" 폴더에 대한 업데이트 정보가 없지만 명령을 실행하면 rsync
내 대상 "Linux" 폴더의 타임스탬프가 다음으로 업데이트되었습니다. 최신 소스 폴더 타임스탬프. 타임스탬프를 복사하고 싶지 않습니다. 이에 대해 저에게 제안해 주시고 제가 사용한 다음 명령을 살펴보시기 바랍니다.
rsync -avh /source/Linux/ /destination/Linux/
rsync -uan /source/Linux/ /destination/Linux/
rsync -uav /source/Linux/ /destination/Linux/
답변1
옵션 -a
( --archive
)은 -t
옵션( --times
, "수정 시간 유지")을 의미합니다.
--no-t
이 옵션을 사용하거나 선택 취소할 수 있습니다.--no-times
뒤쪽에 -a
:
rsync -a --no-t /source/Linux/ /destination/Linux/
소스 타임스탬프를 대상에 복사하지 않습니다. 그러나 rsync
타임스탬프(및 기타 메타데이터)를 비교하여 파일이 업데이트되었는지 복사해야 하는지 확인합니다. 따라서 -u
( --update
)도 사용할 수 있습니다 .
답변2
일반적으로 말하자면, 당신은~해야 한다rsync
앞으로는 더 효율적으로 실행될 것이므로 타임스탬프를 복사하세요 .
그러나 때로는 타임스탬프를 동기화하고 싶지 않을 수도 있습니다. 예를 들어, git
파일의 타임스탬프는 지속적으로 변경되지만 rsync를 실행할 때 전송된 타임스탬프를 보고 싶지 않고 실제로 변경된 파일만 보고 싶을 수 있습니다.
--no-times
타임스탬프 복사를 방지하지만 파일이예업데이트 후 대상 파일의 수정 시간은 다음과 같이 설정됩니다.지금. 이는 이제 타임스탬프가 달라지므로 다음 타임스탬프가 rsync
업데이트해야 한다고 생각하여 다시 전송된다는 의미입니다!
이를 방지하려면--ignore-times
도움이 되지 않습니다, 모든 파일이 업데이트되기 때문입니다.
당신이 할 수 있는 일은 --checksum
rsync를 사용하는 것입니다. 이것은 어려운 작업이지만 원하는 작업을 수행할 것입니다. 타임스탬프를 무시하고 실제로 그런 경우에만 파일을 업데이트합니다.콘텐츠변경되었습니다.
따라서 다음과 같은 명령을 사용할 수 있습니다.
rsync -i -a --no-times --checksum /source/Linux/ /destination/Linux
대체 방법
rsync를 효율적으로 유지하려면 타임스탬프를 동기화 상태로 유지해야 합니다.
하지만 업데이트를 보고 싶지 않다면오직타임스탬프가 변경되면 출력에서 이를 숨길 수 있습니다.
rsync -ai /source/Linux/ /destination/Linux |
grep --line-buffered -v '^.[fd]\.\.t\.\.\.\.\.\. '
이 접근 방식을 사용하면 ! grep
가 아닌 의 종료 코드가 표시됩니다 . rsync
따라서 종료 코드가 오해의 소지가 있으므로 스크립팅에 적합하지 않을 수 있습니다. 다음을 사용하여 이 문제를 해결할 수 있습니다.파이프 고장 또는 파이프 상태.
마지막으로 나는 이것을 사용했습니다.
rsync_ai_with_quiet_timestamps() {
# This will not send timestamps, and not check timestamps, but it is slow
#rsync -a --no-times --checksum -i "$@"
# This will send timestamps, but hide updates which are only timestamp changes
(
set +e
rsync -ai "$@" |
grep --line-buffered -v '^.[fd][.][.]t[.][.][.][.][.][.] '
exit "${PIPESTATUS[0]}"
)
}
...
rsync_ai_with_quiet_timestamps /source/Linux/ /destination/Linux