rsync:为什么使用 --files-from=FILE 时 --archive 不暗示 --recursive ?

rsync:为什么使用 --files-from=FILE 时 --archive 不暗示 --recursive ?

使用-ror--recursive会导致rsync递归到目录。-a--archive等于-rlptgoD,所以-a暗示-r

如果我有目录source/并且dest/我运行:

rsync source dest

然后rsync跳过source/并且不复制任何内容。如果我运行:

rsync -a source dest

然后-a暗示-r并将其所有内容rsync复制到。source/dest/

但是,如果我有一个list.txt包含该行的文件source,并且我的目录的完整路径source//home/user/source/,并且我运行:

rsync -a --files-from=list.txt /home/user/ dest

那么rsync只复制source/dest/但不复制其内容。如果我运行不带选项的命令,也会发生同样的情况-a

但是如果我运行相同的命令-r

rsync -r --files-from=list.txt /home/user/ dest

然后将其所有内容rsync复制到.source/dest/

我的问题是:

  • 为什么不-a暗示-r何时--files-from=FILE使用该选项?这是预期的行为吗?
  • 鉴于该命令rsync source dest跳过source/并复制任何内容,因为source/是一个目录,并且既没有使用-a也没有-r使用,为什么该命令rsync --files-from=list.txt /home/user/ dest仍然复制source/dest/
  • 使用-a该选项时,隐含的其他选项是否仍然有效?--files-from=FILE-r唯一被遗漏的选项吗?

编辑:看来我应该man更仔细地阅读该页面。在该选项的描述下,--files-from=FILE它说:

--archive (-a) 选项的行为并不意味着 --recursive (-r),因此如果需要,请显式指定它。

(回答我的第一个问题。)

隐含了 --dirs (-d) 选项,它将创建目标列表中指定的目录,而不是大声地跳过它们(如果要关闭它,请使用 --no-dirs 或 --no-d )。

(回答我的第二个问题。)

答案1

-a,--archive

这相当于-rlptgoD.这是表达您想要递归并想要保留几乎所有内容的快速方式(使用-H 一个值得注意的遗漏)。 上述等价的唯一例外是何时--files-from指定,在这种情况下-r 不隐含。

当您使用 时--files-from,递归被禁用(这是唯一遗漏的选项)。假设用户确切地知道要传输哪些特定文件,并且他们已在与 一起使用的文件列表中指定了这些文件--files-from

如果在文件列表中指定了目录,则将同步其所有权、时间戳等,但不会同步其内容。

不过,您可以-r显式添加该标志:

rsync -av --files-from=file.list -r src/ dst/

这将产生您正在寻找的效果。

相关内容