Wie funktioniert die Option --fuzzy für rsync?

9

Wie funktioniert das rsync --fuzzy? Ich bekomme nicht die Ergebnisse, die ich erwarte.

Aus dem Handbuch:

Diese Option teilt rsync mit, dass nach einer Basisdatei für jede fehlende Zieldatei gesucht werden soll. Der aktuelle Algorithmus sucht im selben Verzeichnis wie die Zieldatei nach einer Datei mit identischer Größe und Änderungszeit oder nach einer Datei mit ähnlichem Namen. Wenn gefunden, verwendet rsync die Fuzzy-Basisdatei, um die Übertragung zu beschleunigen.

Wenn die Option wiederholt wird, wird der Fuzzy-Scan auch in übereinstimmenden alternativen Zielverzeichnissen durchgeführt, die über --compare-dest, --copy-dest oder --link-dest angegeben werden.

Beachten Sie, dass durch die Verwendung der Option --delete möglicherweise alle Fuzzy-Match-Dateien entfernt werden. Verwenden Sie daher entweder --delete-after oder geben Sie einige Ausschlüsse für Dateinamen an, wenn Sie dies verhindern müssen.

Daher erwarte ich, dass das folgende Shell-Skript die Datei Ziel / a1 beim zweiten rsync-Lauf in Ziel / a2 umbenennt. Bei der Interpretation der Ausgabe ist dies jedoch nicht der Fall ( 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

Ausgabe:

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

Ausgabe von 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.

Wie funktioniert das rsync --fuzzy?

Warum erhalte ich nicht die erwarteten Ergebnisse?

Anders Lundstedt
quelle

Antworten:

3

Sie rsynckopieren Dateien zwischen zwei lokalen Dateibäumen. Der inkrementelle Algorithmus und alle damit verbundenen Optimierungen wie --fuzzywerden in diesem Modus ignoriert.

Wiederholen Sie Ihren Test mit einer lokalen Datei, die auf einen Remote-Server kopiert wird (oder auf einen Remote-Server; es spielt keine Rolle), und Sie werden feststellen, dass sie wie erwartet funktioniert.

Ändern Sie beispielsweise Ihr Skript an beiden Stellen, z. B. $(pwd)/destinationin localhost:$(pwd)/destination. Es ist nicht elegant, aber es wird ausreichen.

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

Skript ergibt sich aus der zweiten 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
quelle