我保留了一份刻录到 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 实现可能有所不同。]