如何在 Rsync 中按名称和深度排除文件

如何在 Rsync 中按名称和深度排除文件

我正在尝试使用 rsync 自动执行一些备份,但遇到以下问题。我有一个文件,其中包含一些要从复制中排除的内容。假设该文件只有一行

exc

我希望 rsync 做的是排除我提供 rsync 的目录中名为“exc”的任何文件或目录。但是,如果我们有以下树:

./
 |
 +---exc
 |      file1
 |
 +---directory
     +  file2
     |
     |
     +---exc
            file3

我希望图表是清楚的。我想要发生的是排除第一个 exc,但复制第二个 exc,同时传递带有 exc 行的文件将排除两者。可能还有其他更深层次的名为 exc 的文件,因此排除文件中的行应仅指向根文件 exc。

排除模式应该是什么样的?

答案1

您可以--exclude在前面添加 a/将其锚定到传输的根。这样,--exclude /exc就会做你想做的事。

使用您的测试用例:

mkdir -p exc directory/exc
touch exc/file1 directory/file2 directory/exc/file3
rsync -av --exclude /exc . /tmp/

/tmp 将包含当前文件夹,包括目录/exc/*,但exc/原始文件夹除外。

相关内容