mksquashfs 不排除文件

tar*_*s89 4 regex wildcard squashfs

我在从 squashfs 中排除特定文件时遇到问题。我希望能够排除所有以 *.db 结尾的文件类型,但没有成功。

\n\n

每当我使用排除该文件的参数运行 mksquashfs 命令时,它总是包含该文件。我尝试了该命令的许多不同变体。我的测试脚本如下:

\n\n
#!/bin/bash\n\nOPT="-regex -e \'*.db\' "\n\necho -e "Creating squashfs..."\nmksquashfs test test.package ${OPT}\necho "Ran the following command: mksquashfs pf test.package ${OPT}"\n\necho -e "Uncompressing squashfs..."\nmkdir pf_post\nunsquashfs -f -d test_post/ test.package \n\necho\nread -p "press any key to continue..."\n\nrm test.package\nrm -r test_post\n
Run Code Online (Sandbox Code Playgroud)\n\n

测试目录的树如下所示。应排除 test.db 的两个实例,但它似乎不起作用。

\n\n
test\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.db\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test.ab\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test.cd\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test.db\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test.ef\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 test.gh\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test.sh\n
Run Code Online (Sandbox Code Playgroud)\n\n

将其切换为通配符部分修复了它。这排除了第一个 .db 文件,但不排除第二个更深的子目录。有没有办法告诉它排除所有“.db”文件,而不仅仅是最低目录中的第一个文件?下面是排除第一种文件类型的代码。两种解决方案仍然没有排除子目录“.db”文件。

\n\n
mksquashfs test test.package -wildcards -e \'*.db\'\n\nmksquashfs test test.package -regex -e \'\\.db$\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

以下链接提供了上述一些解决方案,但我遇到了无法排除所有“.db”文件的死胡同。\n https://askubuntu.com/questions/628585/mksquashfs -不排除文件

\n

小智 8

此信息包含在 Squashfs RELEASE-README 中

除了通配符/正则表达式之外,排除文件还可以是“锚定”或“非锚定”。锚定排除是从目录的根目录匹配而不是其他地方的排除,非锚定排除则匹配任何地方。例如,给定目录层次结构“a/b/c/a/b”,锚定排除“a/b”将匹配目录层次结构根部的“a/b”,但不会匹配“/a” /b”目录“c”内的子目录,而非锚定排除则如此。

非锚定排除

默认情况下,从顶级目录中排除匹配,但排除与源目录中任何位置匹配的文件通常很有用。为此,可以使用非锚定排除,通过在排除模式前加上前缀来指定"... "(即,三个点后跟一个空格,然后是模式)。

例子:

  1. mksquashfs example image.sqsh -wildcards -e '... *.gz'

    排除源目录中任何位置与“*.gz”匹配的文件。例如,这将匹配“example.gz”、“test/example.gz”和“test/test/example.gz”。

  2. mksquashfs example image.sqsh -wildcards -e '... [Tt]est/*.gz'

    排除源目录中任何位置出现的名为“Test”或“test”的目录中与“*.gz”匹配的文件。

同样,使用扩展通配符,否定匹配也是可能的。

  1. mksquashfs example image.sqsh -wildcards -e '... !(*data*).gz'

    排除源目录中任何位置与“*.gz”匹配的所有文件,名称中带有“data”的文件除外。