我有一个~/music
包含所有音乐文件的目录和一个/media/backup/music
我希望使用 与第一个文件同步的目录rsync
。最初,我按照预期rsync -a ~/music /media/backup
创建了包含所有音乐文件的music
目录。/media/backup
从那时起,我修改了里面的很多文件名~/music
,现在我想同步这些更改。做 arsync -ain
似乎将这些修改注册为新的文件 - 因此它将在备份目录中创建一组新文件,而不仅仅是更新现有的目标文件名。我的大多数文件都很大,我不想每次更改名称时都重新复制它们。
有没有办法rsync
通过仅更新源文件名而不创建新文件来同步具有不同名称的相同文件?我可能会使用该--delete
选项来删除无关文件,但如果有更好的方法,我想知道。
例子:
$ cd example
$ rsync -a var backup/ # rsync var under backup/var
$ tree .
.
├── backup
│ └── var
│ ├── JSON.gif
│ └── logs
│ ├── xinit.log
│ └── x.log
└── var
├── JSON.gif
└── logs
├── xinit.log
└── x.log
$ mv var/JSON.gif var/JSON-LOGO.gif # rename some file
$ mv var/logs var/log # rename some directory
$ rsync -a var backup/ # sync the changes
$ tree .
.
├── backup
│ └── var
│ ├── JSON.gif # don't want this one
│ ├── JSON-LOGO.gif # want -only- this one
│ ├── log # same here
│ │ ├── xinit.log
│ │ └── x.log
│ └── logs # don't want this one either
│ ├── xinit.log
│ └── x.log
└── var
├── JSON-LOGO.gif
└── log
├── xinit.log
└── x.log
答案1
您可能会看一下该--fuzzy
选项。
引用手册页:
此选项告诉 rsync 它应该为任何丢失的目标文件查找基础文件。当前算法在与目标文件相同的目录中查找具有相同大小和修改时间的文件或名称相似的文件。如果找到,rsync 将使用模糊基础文件来尝试加快传输速度。
请注意,使用 --delete 选项可能会删除任何潜在的模糊匹配文件,因此如果需要防止这种情况,请使用 --delete-after 或指定一些文件名排除项。
根据此描述,该算法不是很智能,并且不适用于重命名的目录或不同目录中的相同文件。
答案2
你需要使用--delete
.
不知道是否存在其他方式,但音乐文件最大为 10MB,因此再次复制没有问题。
编辑:正如scai所说,你可以使用--fuzzy
,但我真的不会。它不能保证任务的完成,取决于许多可能最终导致误报的变量。