rsync 没有按照我想要的方式创建目标文件夹

use*_*796 0 linux shell bash rsync

我有以下文本文件

...
/a/b/c/f1
/a/b/c/f2
...
/a/b/c/d1
...
Run Code Online (Sandbox Code Playgroud)

其中f1f2是文件,而d1是目录。我想将确切的层次结构复制到我的目标文件夹 ( /z) 中。

使用 bash,对于lr从文本文件读取的每一行,我的脚本都会运行(为了简单起见,我省略了这些选项)

rsync $lr/ /z/$lr

该文件夹被正确复制,因为我获得了/z/a/b/c/d1. 不幸的是,对于文件结果

/z/a/b/c/f1/f1
/z/a/b/c/f2/f2
Run Code Online (Sandbox Code Playgroud)

rsync如何对文件和目录使用上述相同的调用来解决这个问题?

Fre*_*ddy 5

不要手动 rsync 文件。使用该--files-from=选项来包含您的文本文件。

目录规则:

  • 如果路径不以尾随结尾,则仅创建目录/
  • 要同步目录的内容,请添加尾随/或选项--recursive/-r或者

如果使用option-a并且想要递归,则需要-r另外添加。确保文件中的路径相对于源目录(带或不带前导/)。

您输入的一个最小示例是:

rsync --files-from=textfile / /z
Run Code Online (Sandbox Code Playgroud)

如果您需要事先修改/过滤文本文件,您可以将其从 stdin 传递到 rsync,例如

your_command textfile | rsync --files-from=- / /z
Run Code Online (Sandbox Code Playgroud)