vim*_*ude 2 tar special-characters escape-characters
我保留了一张刻录到 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"
Run Code Online (Sandbox Code Playgroud)
创建所有文件的列表(通常我会在刻录 DVD 后附加到列表中):
find photos -type f > list
Run Code Online (Sandbox Code Playgroud)
现在给我新文件,不包括列表中的文件并且不显示目录:
tar cf - photos -X list | tar tf - | grep -v '/$'
Run Code Online (Sandbox Code Playgroud)
结果:
photos/1/P06-23-08_15.21[1].jpg
Run Code Online (Sandbox Code Playgroud)
这不应该显示在文件列表中。我发现它的括号需要用反斜杠转义?但我怎么知道呢?tar 不喜欢或用于其他用途的任何字符列表?
如果您查看tar
的联机帮助页,您会看到:
-X, --exclude-from FILE
exclude patterns listed in FILE
Run Code Online (Sandbox Code Playgroud)
信息文档提供了更多详细信息。
所以list
需要是一个模式列表,而不是文件名。甲图案,为正常,是指壳通配符模式。因此,至少,*
, [
] 和]
是特殊的。可能{
,}
也可能。
该文档还提到您可以通过传递--no-wildcards
. 然后名称将按字面匹配,而不是作为模式匹配。--no-wildcards
需要去之前-X
。
[这是我检查过的 GNU tar。其他 tar 实现可能有所不同。]