jth*_*jth 6 command-line backup archive options rsync
使用-r
or--recursive
会导致rsync
递归到目录。-a
或--archive
等于-rlptgoD
,所以-a
暗示-r
。
如果我有目录source/
并且dest/
我运行:
rsync source dest\n
Run Code Online (Sandbox Code Playgroud)\n\n然后rsync
跳过source/
并且不复制任何内容。如果我运行:
rsync -a source dest\n
Run Code Online (Sandbox Code Playgroud)\n\n然后-a
暗示-r
并将其所有内容rsync
复制到。source/
dest/
但是,如果我有一个list.txt
包含该行的文件source
,并且我的目录的完整路径source/
是/home/user/source/
,并且我运行:
rsync -a --files-from=list.txt /home/user/ dest\n
Run Code Online (Sandbox Code Playgroud)\n\n那么rsync
只复制source/
到dest/
但不复制其内容。如果我运行不带选项的命令,也会发生同样的情况-a
。
但是如果我运行相同的命令-r
:
rsync -r --files-from=list.txt /home/user/ dest\n
Run Code Online (Sandbox Code Playgroud)\n\n然后将其所有内容rsync
复制到.source/
dest/
我的问题是:
\n\n-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
它说:
\n\n\n--archive (-a) 选项\xe2\x80\x99s 行为并不意味着 --recursive (-r),因此如果需要,请明确指定它。
\n
(回答我的第一个问题。)
\n\n\n\n\n隐含了 --dirs (-d) 选项,它将创建目标列表中指定的目录,而不是大声地跳过它们(如果要关闭它,请使用 --no-dirs 或 --no-d )。
\n
(回答我的第二个问题。)
\n
-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)
这将产生您正在寻找的效果。