rsync 로그 파일에서 업데이트되지 않은 파일을 제외하거나 출력합니다.

rsync 로그 파일에서 업데이트되지 않은 파일을 제외하거나 출력합니다.

rsync잠재적으로 전송될 수 있는 파일 수가 많은 파일 의 경우 전송된 내용만 포함하는 "깨끗한" 로그가 있다는 의미입니다.

나는 다음과 stdout같은 이유로 함께 일합니다:

  1. 로그 출력을 구성하는 방법을 모르겠습니다(가능한 경우).
  2. 나는 또한 그것으로 작업하고 싶습니다 --dry-run(이로 인해 다음과 같은 작업을 해야 합니다).이것, 부터).
  3. 내 말은 최소한 Linux-Linux와 Linux-msys2(또는 그 반대)를 전송하는 데 유용한 스크립트를 작성한다는 것입니다. 여기서 권한( -p), 소유자( -o) 및 그룹( -g)에 대한 옵션은 상황을 복잡하게 만들 수 있습니다.

나는 명령을 결합했다

rsync --recursive --perms --group --owner --times --one-file-system --sparse --stats --progress --update --out-format='%t %p %i %n %M %l' --delete --dry-run --include="*" --exclude="*" --log-file=rsync.log ./ ../trg

그리고

... | grep -E -v ' \.[fdLDS][\.c][\.s][\.t][\.p][\.o][\.g][\.u][\.a][\.x]'

설명한대로여기. 첫 번째 포인트는 업데이트되지 않은 모든 항목과 일치합니다. 두 번째 문자는 모든 항목 유형과 일치합니다. 나머지 문자는 속성(변경/변경 안함) 플래그의 조건과 일치하여 -v일치를 재개합니다. 이는 업데이트되는 프로젝트와 일치할 수 있으며 그 이상은 아닙니다. 업데이트되지 않았지만 타임스탬프가 변경된 항목은 일치하지 않습니다.

tee나는 그것을 다음과 같은 것과 결합했습니다.

rsync --recursive --perms --group --owner --times --one-file-system --sparse --stats --progress --update --out-format='%t %p %i %n %M %l' --delete --dry-run --include="*" --exclude="*" --log-file=rsync.log ./ ../trg | grep -E -v ' \.[fdLDS][\.c][\.s][\.t][\.p][\.o][\.g][\.u][\.a][\.x]' | tee rsync.2.log

rsync로그 파일 rsync.log과 "사용자 정의" 로그 파일을 생성합니다 rsync.2.log.

작동하는 것처럼 보이지만 내 접근 방식에는 다음과 같은 3가지 "약점"이 있습니다.

  1. 이 접근 방식이 실패할 수 있는 상황이 있는지 확실하지 않습니다("너무 많은" 보고서 또는 필터링된 파일을 통해).
  2. rsync이 문제를 로컬에서 직접 처리 하고 싶습니다 . 더 나은 방법은 rsync무차별 대입 방법을 사용하는 대신 로그 파일에서 출력(출력뿐만 아니라)을 얻는 것입니다 grep. 예를 들어 --itemize-changes표준 출력의 상태가 있는 일부 파일을 가져오려면 I를 사용하여 .f...p.....필터링해야 합니다(업데이트되지 않고 첫 번째 문자가 점이므로).
  3. 사용 중 grep부분적인 진행 상황을 볼 수 없습니다. 이것이 매우 큰 출력에 큰 문제가 될지는 잘 모르겠습니다.

관련된:

  1. rsync 로그 삭제 파일을 만드는 방법
  2. rsync에서 스캔된 모든 폴더가 아닌 복사 중인 파일만 표시하도록 하려면 어떻게 해야 합니까?
  3. rsync를 사용하여 로그 파일만 전송됨
  4. https://superuser.com/questions/1002074/linux-command-line-to-create-a-log-file-for-rsync
  5. https://serverfault.com/questions/401210/rsync-report-only-uploaded-files

노트: 이 질문의 미묘함(답변 참조)은 게시/링크된 다른 유사한 질문과 약간 다릅니다. 이것이 별도의 질문이어야 하는지 여부는 모호하고 주관적입니다. 저는 개인적으로 현재 상태를 유지하는 것이 유용하다고 생각합니다.

답변1

3가지 요청이 있습니다:

  1. 로그 출력을 구성합니다. 이렇게 하려면 --itemize-changes내가 게시한 링크와 @roaima가 추가한 다른 링크에 표시된 것처럼 훌륭하게 작동합니다.
  2. 작업 --dry-run. 이를 위해 --itemize-changes비록 로그 파일이 아닌 표준 출력에서만 예상되는 출력을 생성하는 것이 여전히 유용합니다. 선택의 여지가없는 것 같습니다.
  3. 다양한 운영 체제 조합(src/trg)을 사용합니다. 최소한 Linux-Linux 및 Linux-msys2(또는 그 반대). Msys2의 경우 NTFS이므로 권한이 ext4의 권한과 일치할 수 없습니다. 따라서 이미 rsync편집된 파일이 계속 표시되므로 목록이 매우 길어집니다. 이런 경우에는 --perms제거해야 합니다. 이는 읽기 전용 <-> 읽기-쓰기 권한 변경도 복제하지 않습니다. 지금까지 모든 경우에 대한 완벽한 솔루션은 없습니다. 그 외에는 --itemize-changes이 상황에서도 여전히 유용합니다.

관련 정보