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

jth*_*jth 6 command-line backup archive options rsync

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

\n\n

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

\n\n
rsync source dest\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
rsync -a source dest\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
rsync -a --files-from=list.txt /home/user/ dest\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

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

\n\n
rsync -r --files-from=list.txt /home/user/ dest\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

我的问题是:

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

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

\n\n
\n

--archive (-a) 选项\xe2\x80\x99s 行为并不意味着 --recursive (-r),因此如果需要,请明确指定它。

\n
\n\n

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

\n\n
\n

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

\n
\n\n

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

\n

Kus*_*nda 9

-a,--archive

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

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

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

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

rsync -av --files-from=file.list -r src/ dst/
Run Code Online (Sandbox Code Playgroud)

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