Rsync : 타임 스탬프 만 복사 rsync –dry-run

현재 타임 스탬프를 제외하고 모든면에서 동일한 두 개의 디렉토리 A / B가 있습니다. 따라서 내가 명령을 실행하면 :

rsync --dry-run -crvv A/ B/

그런 다음 모든 파일은 “최신”으로 표시되지만 명령은 다음과 같습니다.

rsync --dry-run -rvv A/ B/

모든 파일이 A /에서 B /로 복사됨을 나타냅니다.

내 질문은 이것입니다 : 파일이 내용과 관련하여 동일하다는 것을 알고 있다면 (rsync 또는 다른 방법으로) B의 파일에 대한 타임 스탬프를 파일의 타임 스탬프와 동일하게 설정하는 방법이 있습니까? A /에서 B /로 모든 파일을 복사하지 않고 A /?

감사



답변

-t(타임 스탬프 유지)를 사용하면 --size-only크기가 큰 파일 만 비교합니다. 크기가 일치하면 rsync는 파일을 복사하지 않지만 -t지정된 이후 에 파일을 다시 복사하지 않고 대상 파일의 타임 스탬프를 업데이트합니다.

-u이미 존재하는 파일을 건너 뛰고 타임 스탬프 업데이트를 완전히 건너 뛰므로 (업데이트)를 사용하지 마십시오 .

원래 rsync를 사용하여 많은 파일을 새 드라이브에 복사하지 않아서 타임 스탬프가 현재 시간으로 업데이트되는 문제가있었습니다. 적절한 시간 내에 모든 것을 올바르게 동기화하기 위해 아래 명령을 사용했습니다.

rsync -vrt --size-only /src /dest

답변

–size-only를 사용하면 크기가 일치하는 경우 rsync가 파일 타임 스탬프 (및 파일 내용) 비교를 건너 뜁니다. 이것을 –times와 결합하면 타임 스탬프를 대상 트리에 복제합니다.


답변

rsync가 이것을 만드는 올바른 도구라고 생각하지만 스크립트를 원한다면 이것을 시작하는 것이 좋습니다.

다음과 같이 타임 스탬프 (액세스 시간)가있는 파일 목록을 얻을 수 있습니다.

find . -printf '"%p" %a\n' -type f > /tmp/times

그리고 적절한 시간 업데이트 명령을 얻으십시오.

 while read line; do echo touch -a -d \"${line#* }\" ${line%% *}; done < /tmp/times

완전한 스크립트는 아니지만 시작점이 좋습니다! 🙂


답변

touch 명령에 대한 참조로 소스 (예 🙂 /path/to/source디렉토리를 사용하십시오 . 그냥 cd당신에 대한 대상 디렉토리와 할 일

find -type f -exec touch -r /path/to/source/{} {} \;

rsync (yet)로 초 미만의 타임 스탬프를 복사 할 수 없습니다.

이것은 디렉토리와 의사 파일에서도 작동합니다 (을 제거하거나 변경하십시오 -type f)


답변

글쎄, 당신은 확실히 한 쪽에서 타임 스탬프를 읽은 다음 touch를 사용하여 다른 쪽의 동일한 파일에 설정하는 스크립트를 작성할 수 있습니다.

그러나 rsync가 모든 파일을 복사하려고 시도하는 것보다 훨씬 오래 걸릴 수 있습니다. 실제로 데이터가 거의 전송되지 않습니다 (파일이 실제로 동일한 경우 블록 해시 만). 그러나 모든 파일의 전체 내용은 최소한 양쪽에서 읽어야합니다. 따라서 디스크 대역폭이나 IOPS에 의해 시간이 오래 걸릴 수 있습니다. 그러나 여전히 스크립트를 작성하고 테스트하는 것보다 시간이 덜 걸릴 것입니다.


답변

파일수정하고 원래 타임 스탬프를 유지 하려는 나와 같은 사람들 (예 : 음악 라이브러리의 메타 태그를 업데이트)

Stone에서 제공하는 솔루션을 기반으로합니다. 그러나 여기 수정 시간과 타임 스탬프를 복원하는 작업 스크립트에 대해 설명합니다. 먼저 1 단계를 수행 한 다음 파일 작업을 시작하십시오.

  1. 오래된 타임 스탬프를 유지하십시오 . 현재 디렉토리에서 작동하고 모든 숨겨진 파일을 제외하고에 임시 파일로 저장합니다 /tmp/files. 항상 매개 변수를 변경할 수 있지만 -printf '"%t" "%p"\n'이후 touch명령이이를 사용 하므로 계속 유지하는 것이 좋습니다 .

    find . ! -iname ".*" -printf '"%t" "%p"\n' -type f > /tmp/files

  2. 원하는 만큼 파일 수정

  3. 이제 타임 스탬프를 복원하는 데 도움이되는 파일을 만듭니다.

    while read line; do echo touch -a -d $line >> job.sh; done < /tmp/times

  4. 마지막으로 수정 된 파일에 이전 날짜를 적용하십시오.

    sh job.sh

주의 사항 : 이름 간격이있는 파일, 특수 문자가 있지만 예를 들어 $기호가있는 파일은 작동하지 않습니다 .


답변

Windows에서 타임 스탬프 만 복사하는 가장 좋은 방법 :

파일의 마지막 생성 / 수정 / 액세스 타임 스탬프를 다른 파일로 복사하려면 다음을 사용하십시오.

/ c / m / a / r를 터치합니다. SourceFile DestFile

(이 버전의 Touch는 Win32 Console ToolBox http://www.stevemiller.net/apps/의 일부입니다 )

Robocopy “SOURCE_DIRECTORY” “DESTINATION_DIRECTORY”/ E / COPYALL / DCOPY : DAT / XF 입니다. / R : 10 / W : 5 / V / ETA