Bagaimana cara opsi --fuzzy untuk rsync berfungsi?

9

Bagaimana cara rsync --fuzzykerjanya? Saya tidak mendapatkan hasil yang saya harapkan.

Dari manual:

Opsi ini memberi tahu rsync bahwa ia harus mencari file basis untuk file tujuan yang hilang. Algoritme saat ini terlihat di direktori yang sama dengan file tujuan untuk file yang memiliki ukuran yang identik dan waktu yang dimodifikasi, atau file dengan nama yang sama. Jika ditemukan, rsync menggunakan file berbasis fuzzy untuk mencoba mempercepat transfer.

Jika opsi ini diulang, pemindaian fuzzy juga akan dilakukan di direktori tujuan alternatif pencocokan apa pun yang ditentukan melalui --compare-dest, --copy-dest, atau --link-dest.

Perhatikan bahwa penggunaan opsi --delete mungkin menyingkirkan semua file fuzzy-match yang potensial, jadi gunakan --delete-after atau tentukan beberapa pengecualian nama file jika Anda perlu mencegahnya.

Jadi saya berharap skrip shell berikut untuk mengubah nama file tujuan / a1 ke tujuan / a2 pada run rsync kedua. Namun ketika saya menafsirkan output ini bukan apa yang terjadi ( 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

Keluaran:

├── 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

Output dari 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.

Bagaimana cara rsync --fuzzykerjanya?

Mengapa saya tidak mendapatkan hasil yang saya harapkan?

Anders Lundstedt
sumber

Jawaban:

3

Anda menggunakan rsyncuntuk menyalin file di antara dua pohon file lokal. Algoritma tambahan, dan semua optimisasinya yang terkait seperti --fuzzy, diabaikan dalam mode ini.

Ulangi pengujian Anda dengan file lokal yang disalin ke server jauh (atau jauh ke lokal; itu tidak masalah) dan Anda akan menemukan itu berfungsi seperti yang diharapkan.

Sebagai contoh, modifikasi skrip Anda di kedua tempat seperti $(pwd)/destinationdiubah menjadi localhost:$(pwd)/destination. Itu tidak elegan tetapi itu sudah cukup.

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

Hasil skrip dari yang kedua 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
roaima
sumber