rsync的--fuzzy选项如何工作?


9

rsync --fuzzy工作如何?我没有得到预期的结果。

从手册中:

此选项告诉rsync,它应为缺少的任何目标文件寻找基础文件。对于大小和修改时间相同的文件或名称相似的文件,当前算法在与目标文件相同的目录中查找。如果找到,rsync将使用模糊基础文件来尝试加快传输速度。

如果重复该选项,则还将在通过--compare-dest,--copy-dest或--link-dest指定的任何匹配的备用目标目录中进行模糊扫描。

请注意,使用--delete选项可能会消除任何潜在的模糊匹配文件,因此,如果需要避免使用--delete-after或指定一些文件名排除项。

因此,我希望以下shell脚本在第二次rsync运行时将文件destination / a1重命名为destination / 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工作如何?

为什么没有得到我期望的结果?

Answers:


3

您正在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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.