얼마 rsync
전 내가 작성중인 스크립트 의 출력 을 이해해야 했습니다. 그 스크립트를 작성하는 동안 나는 주위를 둘러 보았고 @mit가 위에 쓴 것에 이르렀다 . 이 정보와 다른 소스의 문서를 사용하여 비트 플래그에 대한 나만의 입문서를 만들고 rsync
모든 작업에 대해 비트 플래그를 출력 하는 방법을 만들었습니다 (기본적으로이 작업은 수행하지 않음).
이 정보가 검색을 통해이 페이지에서 우연히 발견되고 더 나은 설명이 필요한 다른 사람들에게 도움이되기를 바라며 여기에 해당 정보를 게시하고 있습니다 rsync
.
의 조합으로 --itemize-changes
플래그 와-vvv
플래그, rsync
우리에게 대상 디렉토리에 비해 소스 디렉토리에서 발견 된 모든 파일 시스템 변경 사항의 자세한 출력을 제공합니다. rsync
그런 다음에서 생성 된 비트 플래그를 디코딩하여 변경된 내용을 확인할 수 있습니다. 각 비트의 의미를 디코딩하려면 다음 표를 사용하십시오.
rsync
의 출력 에서 각 비트 위치 및 값에 대한 설명 :
YXcstpoguax path/to/file
|||||||||||
||||||||||╰- x: The extended attribute information changed
|||||||||╰-- a: The ACL information changed
||||||||╰--- u: The u slot is reserved for future use
|||||||╰---- g: Group is different
||||||╰----- o: Owner is different
|||||╰------ p: Permission are different
||||╰------- t: Modification time is different
|||╰-------- s: Size is different
||╰--------- c: Different checksum (for regular files), or
|| changed value (for symlinks, devices, and special files)
|╰---------- the file type:
| f: for a file,
| d: for a directory,
| L: for a symlink,
| D: for a device,
| S: for a special file (e.g. named sockets and fifos)
╰----------- the type of update being done::
<: file is being transferred to the remote host (sent)
>: file is being transferred to the local host (received)
c: local change/creation for the item, such as:
- the creation of a directory
- the changing of a symlink,
- etc.
h: the item is a hard link to another item (requires
--hard-links).
.: the item is not being updated (though it might have
attributes that are being modified)
*: means that the rest of the itemized-output area contains
a message (e.g. "deleting")
다양한 시나리오에 대한 rsync의 출력 예 :
>f+++++++++ some/dir/new-file.txt
.f....og..x some/dir/existing-file-with-changed-owner-and-group.txt
.f........x some/dir/existing-file-with-changed-unnamed-attribute.txt
>f...p....x some/dir/existing-file-with-changed-permissions.txt
>f..t..g..x some/dir/existing-file-with-changed-time-and-group.txt
>f.s......x some/dir/existing-file-with-changed-size.txt
>f.st.....x some/dir/existing-file-with-changed-size-and-time-stamp.txt
cd+++++++++ some/dir/new-directory/
.d....og... some/dir/existing-directory-with-changed-owner-and-group/
.d..t...... some/dir/existing-directory-with-different-time-stamp/
rsync
의 출력 캡처 (비트 플래그에 중점) :
내 실험에서 모두 --itemize-changes
플래그 와-vvv
플래그는 얻을하는 데 필요한 rsync
출력에 대한 항목 모든 파일 시스템 변경. 삼중 상세 표시 ( -vvv
) 플래그가 없으면 디렉토리, 링크 및 장치 변경 사항이 나열되지 않았습니다. rsync 버전을 실험하여 예상 한 모든 내용을 관찰하고 기록하는지 확인하는 것이 좋습니다.
이 기술의 편리한 사용 중 하나 --dry-run
는 명령에 플래그 를 추가하고 rsync에 의해 결정된 변경 목록을 변수에 수집하여 (변경하지 않고) 목록에서 직접 처리 할 수 있도록하는 것입니다. 다음과 같은 것은 변수의 출력을 캡처합니다.
file_system_changes=$(rsync --archive --acls --xattrs \
--checksum --dry-run \
--itemize-changes -vvv \
"/some/source-path/" \
"/some/destination-path/" \
| grep -E '^(\.|>|<|c|h|\*).......... .')
위의 예에서 (stdout) 출력은 (stdin을 통해)로 rsync
리디렉션 grep
되므로 비트 플래그가 포함 된 라인 만 분리 할 수 있습니다.
캡처 된 출력 처리 :
그런 다음 나중에 사용하기 위해 변수의 내용을 기록하거나 관심 항목에 대해 즉시 반복 할 수 있습니다. 에 대해 자세히 조사하는 동안 작성한 스크립트에서이 정확한 전술을 사용합니다 rsync
. 새 파일, 중복 파일 (동일한 이름, 동일한 내용), 파일 충돌 (동일한 이름, 다름)을 분리하기 위해 캡처 된 출력을 사후 처리하는 예제 는 스크립트 ( https://github.com/jmmitchell/movestough )를 참조하십시오. 내용) 및 하위 디렉토리 구조의 변경 사항.