tar排除文件未生效

6
这个tar命令有什么问题?
$ tar --exclude='/tmp/test/exclude-me' -zcvf test.tar.gz test
  test/
  test/c.txt
  test/exclude-me/
  test/exclude-me/b.txt
  test/a.txt

您可能已经看到,当我解压档案时,会出现exclude-me。我还尝试了--exclude=/tmp/test/exclude-me/*

2个回答

7
exclude 参数系列适用于 tar 包中文件的 内部相对 名称。由于该 tar 包仅包含从提供的根目录开始的相对路径,因此您指定的绝对路径永远不会存在于 tar 包中。

谢谢!这很有效,但我仍然有一个棘手的排除情况:我的归档文件以 a 为根目录,我想排除 a/b,但我想保留 a/a/b。这可行吗? - Rose Perrone
1
对于更复杂的场景,您可以始终首先运行 find 命令生成一个“排除文件”,然后使用 --exclude-from 选项将其包含进去。有关所有选项的完整列表,请单击此处查看(http://www.gnu.org/software/tar/manual/html_node/exclude.html#SEC109)。 - Niels Keurentjes
除非使用“--no-achored”选项,否则排除模式必须与文件名开头匹配。 - Etan Reisner
1
@EtanReisner 当我使用 --exclude=dirname 时,任何包含名称为 dirname 的目录都会被排除,无论它在文件层次结构中的深度如何。 - Rose Perrone
@RosePerrone 那么也许您的默认设置是反转的?在命令中使用 --anchored 是否会改变这种行为? - Etan Reisner
@EtanReisner 不是的。--no-anchor--anchor 都会排除所有带有 dirname 的目录。 - Rose Perrone

1
你需要省略路径的绝对部分。
在你的示例中,你使用了v标志,并列出了包含的文件。
排除模式与此列表的条目匹配,而不是实际文件路径。因此,你必须将模式更改为“test / exclude-me”。
由于某种原因,你还必须删除文件夹的尾随/。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接