rsync --list-only 输出不符合预期

rsync --list-only 输出不符合预期

rsync 选项--list-only似乎给出的输出不太正确。这是我的测试文件:

~/src$ ls
lrwxrwxrwx 1 michael michael 23 Sep  5 09:19 far_symlink -> /home/michael/Documents
-rw------- 1 michael michael  0 Sep  5 09:18 file
lrwxrwxrwx 1 michael michael  4 Sep  5 09:18 near_symlink -> file

我想要一个将被传输的文件列表,并且我不需要符号链接,所以我使用以下命令运行它--list-only

~/src$ rsync -r --no-links --list-only ./ ~/dest
drwx------          4,096 2018/09/05 09:19:05 .
lrwxrwxrwx             23 2018/09/05 09:19:05 far_symlink
-rw-------              0 2018/09/05 09:18:15 file
lrwxrwxrwx              4 2018/09/05 09:18:28 near_symlink

它表示符号链接将要可以转移,但事实并非如此。如果我真的进行转账:

~/src$ ls ~/dest
drwx------  2 michael michael 4.0K 2018-09-05 09:39:16 .
drwxr-xr-x 30 michael michael 4.0K 2018-09-05 09:44:49 ..

~/src$ rsync -r --no-links ./ ~/dest
skipping non-regular file "far_symlink"
skipping non-regular file "near_symlink"

~/src$ ls ~/dest
drwxr-xr-x 30 michael michael 4.0K 2018-09-05 09:44:49 ..
-rw-------  1 michael michael    0 2018-09-05 09:48:10 file
drwx------  2 michael michael 4.0K 2018-09-05 09:48:10 .

符号链接未发送。

所以给人的感觉--list-only就是不诚实。有没有什么方法可以获取实际要传输的文件的列表(无需与远程 ssh 服务器等进行联系)?我缺少什么?

我使用的是 Ubuntu 18.04。其他详情:

$ uname -a
Linux ubuntu 4.15.0-33-generic #36-Ubuntu SMP Wed Aug 15 16:00:05 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ rsync --version
rsync  version 3.1.2  protocol version 31
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

更新:请原谅我糟糕的术语。我理解什么是 a 之间的区别候选人转移与什么将要被转移。我的问题是为什么符号链接被视为候选人转移(并因此被 列出--list-only),而无论目的地的条件如何,它们显然都不会被转移,并且(我认为)它们被 明确排除no-links

答案1

--list-only选项不识别文件将要被转移;它只识别那些文件候选人以便被转移。你可以在这里看到这个

touch aa bb cc; ln -s cc dd
rsync --list-only --no-links -a ?? /tmp
rsync -av ?? /tmp

rsync --list-only --no-links -a ?? /tmp

最后的输出rsync

-rw-r--r--              0 2018/09/05 16:35:01 aa
-rw-r--r--              0 2018/09/05 16:35:01 bb
-rw-r--r--              0 2018/09/05 16:35:01 cc
lrwxrwxrwx              2 2018/09/05 16:35:01 dd -> cc

考虑最后一个rsync,其中文件已经传输并且在源上保持不变。如果--list-only要显示需要传输的文件,则不会列出任何内容。但是,它仍然显示需要考虑的源文件集。

如果您想使用目标的上下文来管理要报告的文件集,请使用--dry-run --info=name

rsync --dry-run --info=name --archive --no-links ?? /tmp

或者,如果您想要与生成的输出类似的输出--list-only(特别是省略第一个字符中的条目类型)

rsync --dry-run --info=name --out-format='%B%16l %t %f' --archive --no-links ?? /tmp

初始输出

skipping non-regular file "dd"
rw-r--r--               0 2018/09/05 16:42:30 aa
rw-r--r--               0 2018/09/05 16:42:30 bb
rw-r--r--               0 2018/09/05 16:42:30 cc

复制文件后的后续输出

skipping non-regular file "dd"

相关内容