我有一个有效的 rsync 调用,它获取要上传的本地目录列表(简化):
$ rsync --files-from=dirs_to_backup.txt --recursive ./ remote:
我现在想对所有本地文件执行自己的一致性检查,因此我需要与 rsync 使用的相同的文件列表。有一个有用的选项可以实现这一点:
--仅列表
此选项将导致列出源文件而不是传输源文件。如果只有一个源参数而没有指定目标,则会推断此选项,因此其主要用途是:(1)将包含目标参数的复制命令转换为文件列表命令,或者 (2) 能够指定多个源参数(注意:一定要包含目标)。注意:请记住,带有通配符的源参数会被 shell 扩展为多个参数,因此,如果不使用此选项,尝试列出这样的参数永远是不安全的。例如:
这听起来正是我需要的,但与以下一起使用时会失败--files-from
$ rsync --files-from=dirs_to_backup.txt --recursive ./
rsync version 3.1.3 protocol version 31
Copyright (C) 1996-2018 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, no 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 is a file transfer program capable of efficient remote update
via a fast differencing algorithm.
Usage: rsync [OPTION]... SRC [SRC]... DEST
[...]
rsync error: syntax or usage error (code 1) at options.c(2326) [client=3.1.3]
在所有位置明确添加--list-only
也无济于事。的内容dirs_to_backup.txt
似乎也不重要,即使是不存在的文件也会出现相同的错误。删除--files-from
有效,但我想保留此选项。
我是不是漏掉了什么,还是这是一个 bug?有没有其他方法可以只列出?
答案1
如果使用,--files-from=FILE
则不能省略目标目录。即使使用,这也适用--list-files
。
# Works
rsync --times --files-from=FILE --list-only src/ dst/
# Fails
rsync --times --files-from=FILE --list-only src/
我猜想这里的理由是你已经有一个要传输的候选文件列表,所以你不需要rsync
重复这一点。请注意,它没有列出将要传输的文件集;相反,它列出了将考虑传输的候选文件集。如果你用以下代码--list-only
替换,你将更好地了解实际要做的工作:--list-only
--dry-run --itemize-changes --verbose
rsync --dry-run -tiv --files-from=FILE src/ dst/