TAR 不喜欢哪些角色?

TAR 不喜欢哪些角色?

我保留了一份刻录到 DVD 的照片列表以进行增量备份,但我遇到了一个奇怪的情况:文件已经刻录到 DVD 中,但 tar 一直说它没有。这里是重现的步骤:

mkdir tarbug && cd tarbug
mkdir -p photos/{1,2,3}
touch "photos/1/P06-23-08_15.21[1].jpg"
touch "photos/2/P06.jpg"
touch "photos/3/P01.jpg"

创建所有文件的列表(通常我会在刻录 DVD 后附加到列表):

find photos -type f > list

现在给我新文件,不包括列表中的文件并且不显示目录:

tar cf - photos -X list | tar tf - | grep -v '/$'

结果:

photos/1/P06-23-08_15.21[1].jpg

它不应该显示在文件列表中。我发现括号需要用反斜杠转义?但我怎么知道呢? tar 不喜欢或用于其他用途的任何字符列表吗?

答案1

如果你查看 的tar联机帮助页,你会看到:

 -X, --exclude-from FILE
       exclude patterns listed in FILE

信息文档提供了更多详细信息。

所以list需要是模式列表,而不是文件名。 A图案正常情况下,表示 shell 通配符模式。因此,至少,*[] 和]是特殊的。可能{也是}如此。

该文档还提到您可以通过传递 来更改此设置--no-wildcards。然后名称将按字面匹配,而不是作为模式匹配。--no-wildcards需要在 之前去-X

[这是我检查过的 GNU tar。其他 tar 实现可能有所不同。]

相关内容