tar - 如何像这样排除:“/path/excludeRoot/**/directoryToExclude”

tar - 如何像这样排除:“/path/excludeRoot/**/directoryToExclude”

我想从备份中排除一些目录。但不是所有具有特定名称的目录 - 仅是位于指定根目录下的目录。使用 rsync 时,我将使用排除掩码,如下所示:

/path/excludeRoot/**/directoryToExclude

这意味着名称位于directoryToExclude下面的所有目录都/path/excludeRoot将被排除。

另一方面:每个有名称directoryToExclude但位于其他地方的目录都将被包含

可以用 tar 来做吗?

答案1

遗憾的是,这不可能直接实现,因为--exclude选项系列不够强大。

一种方法是使用外部程序(比如)获取对象列表find,然后使用-T开关告诉 tar 应该包含哪些文件/对象。

引用手册页:

-T, --files-from FILE
  get names to extract or create from FILE

如果文件名包含特殊符号(和/或空格),我会将其添加--null到 tar 命令行;为了生成列表,我还会使用find -- 用 NUL( )字符-print0分隔文件/目录。\000

相关内容