jth*_*jth 6 command-line backup archive options rsync
使用-ror--recursive会导致rsync递归到目录。-a或--archive等于-rlptgoD,所以-a暗示-r。
如果我有目录source/并且dest/我运行:
rsync source dest\nRun Code Online (Sandbox Code Playgroud)\n\n然后rsync跳过source/并且不复制任何内容。如果我运行:
rsync -a source dest\nRun 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\nRun Code Online (Sandbox Code Playgroud)\n\n那么rsync只复制source/到dest/但不复制其内容。如果我运行不带选项的命令,也会发生同样的情况-a。
但是如果我运行相同的命令-r:
rsync -r --files-from=list.txt /home/user/ dest\nRun 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)
这将产生您正在寻找的效果。