¿Cómo funciona la opción --fuzzy para rsync?

9

Como rsync --fuzzyfunciona No obtengo los resultados que espero.

Del manual:

Esta opción le dice a rsync que debe buscar un archivo base para cualquier archivo de destino que falta. El algoritmo actual busca en el mismo directorio que el archivo de destino un archivo que tenga un tamaño y un tiempo de modificación idénticos, o un archivo con un nombre similar. Si se encuentra, rsync usa el archivo de base difusa para intentar acelerar la transferencia.

Si se repite la opción, la exploración difusa también se realizará en cualquier directorio de destino alternativo coincidente que se especifique a través de --compare-dest, --copy-dest o --link-dest.

Tenga en cuenta que el uso de la opción --delete podría eliminar cualquier posible archivo de coincidencia difusa, por lo tanto, use --delete-after o especifique algunas exclusiones de nombre de archivo si necesita evitar esto.

Por lo tanto, espero que el siguiente script de shell cambie el nombre del archivo destino / a1 a destino / a2 en la segunda ejecución de rsync. Sin embargo, como interpreto el resultado, esto no es lo que está sucediendo ( 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

Salida:

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

Salida de 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.

Como rsync --fuzzyfunciona

¿Por qué no obtengo los resultados que espero?

Anders Lundstedt
fuente

Respuestas:

3

Estás utilizando rsyncpara copiar archivos entre dos árboles de archivos locales. El algoritmo incremental y todas sus optimizaciones asociadas, como --fuzzy, se ignoran en este modo.

Repita su prueba con un archivo local que se copia a un servidor remoto (o remoto a local; no importa) y verá que funciona como se esperaba.

Como ejemplo, modifique su secuencia de comandos en ambos lugares, como $(pwd)/destinationse cambia a localhost:$(pwd)/destination. No es elegante pero será suficiente.

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

Resultados del guión del segundo 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
fuente