rsync의 --fuzzy 옵션은 어떻게 작동합니까?

rsync의 --fuzzy 옵션은 어떻게 작동합니까?

어떻게 rsync --fuzzy작동하나요? 기대했던 결과가 나오지 않습니다.

매뉴얼에서:

이 옵션은 rsync에게 누락된 대상 파일에 대한 기본 파일을 찾아야 한다고 지시합니다. 현재 알고리즘은 대상 파일과 동일한 디렉터리에서 크기와 수정 시간이 동일한 파일 또는 유사한 이름을 가진 파일을 찾습니다. 발견되면 rsync는 난독화된 기본 파일을 사용하여 전송 속도를 높이려고 시도합니다.

이 옵션을 반복하면 --compare-dest, --copy-dest 또는 --link-dest를 통해 지정된 일치하는 대체 대상 디렉터리에서도 퍼지 스캔이 완료됩니다.

--delete 옵션을 사용하면 잠재적인 퍼지 일치 파일이 삭제될 수 있으므로 이를 방지해야 하는 경우 --delete-after를 사용하거나 일부 파일 이름 제외를 지정하십시오.

따라서 다음 쉘 스크립트를 사용하여 rsync가 두 번째로 실행될 때 파일 target/a1의 이름을 target/a2로 바꾸도록 합니다. 그러나 출력을 해석해 보면 이런 일은 일어나지 않습니다( Matched data: 0 bytes).

#! /usr/bin/env bash
set -e

cd $(mktemp -d)
mkdir source destination
cat /dev/urandom | head --bytes=1M > source/a1
rsync --recursive --times $(pwd)/source/ $(pwd)/destination/
tree
mv source/a1 source/a2
rsync \
    --verbose \
    --recursive \
    --times \
    --delete \
    --delete-after \
    --fuzzy \
    --human-readable \
    --itemize-changes \
    --stats \
    $(pwd)/source/ \
    $(pwd)/destination/
tree
rm -r source destination

산출:

├── destination
│   └── a1
└── source
    └── a1

2 directories, 2 files
building file list ... done
>f+++++++++ a2
*deleting   a1

Number of files: 2 (reg: 1, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 1 (reg: 1)
Number of regular files transferred: 1
Total file size: 1.05M bytes
Total transferred file size: 1.05M bytes
Literal data: 1.05M bytes
Matched data: 0 bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 1.05M
Total bytes received: 34

sent 1.05M bytes  received 34 bytes  2.10M bytes/sec
total size is 1.05M  speedup is 1.00
.
├── destination
│   └── a2
└── source
    └── a2

2 directories, 2 files

출력 rsync --version:

rsync  version 3.1.2  protocol version 31
Copyright (C) 1996-2015 by Andrew Tridgell, Wayne Davison, and others.
Web site: http://rsync.samba.org/
Capabilities:
    64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
    socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
    append, ACLs, xattrs, iconv, symtimes, prealloc

rsync comes with ABSOLUTELY NO WARRANTY.  This is free software, and you
are welcome to redistribute it under certain conditions.  See the GNU
General Public Licence for details.

어떻게 rsync --fuzzy작동하나요?

왜 기대한 결과를 얻지 못합니까?

답변1

rsync두 로컬 파일 트리 간에 파일을 복사하는 데 사용하고 있습니다 . --fuzzy이 모드에서는 증분 알고리즘 및 관련된 모든 최적화(예:)가 무시됩니다.

로컬 파일을 원격 서버에 복사하여(또는 원격에서 로컬로, 상관없음) 테스트를 반복하면 예상대로 작동하는 것을 확인할 수 있습니다.

예를 들어 스크립트를 두 곳에서 수정합니다 $(pwd)/destination. localhost:$(pwd)/destination예를 들어 우아하지는 않지만 충분합니다.

# Set up PKI for localhost
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >>~/.ssh/authorized_keys
ssh localhost id

두 번째 스크립트 결과 rsync:

building file list ... done
<f+++++++++ a2
*deleting   a1

Number of files: 2 (reg: 1, dir: 1)
Number of created files: 1 (reg: 1)
Number of deleted files: 1 (reg: 1)
Number of regular files transferred: 1
Total file size: 1.05M bytes
Total transferred file size: 1.05M bytes
Literal data: 0 bytes
Matched data: 1.05M bytes
File list size: 0
File list generation time: 0.001 seconds
File list transfer time: 0.000 seconds
Total bytes sent: 4.20K
Total bytes received: 6.18K

sent 4.20K bytes  received 6.18K bytes  20.75K bytes/sec
total size is 1.05M  speedup is 101.09

관련 정보