mksquashfs 不排除文件

mksquashfs not excluding file

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

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

#!/bin/bash

OPT="-regex -e '*.db' "

echo -e "Creating squashfs..."
mksquashfs test test.package ${OPT}
echo "Ran the following command: mksquashfs pf test.package ${OPT}"

echo -e "Uncompressing squashfs..."
mkdir pf_post
unsquashfs -f -d test_post/ test.package 

echo
read -p "press any key to continue..."

rm test.package
rm -r test_post

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

test
├── test
│   └── test.db
├── test.ab
├── test.cd
├── test.db
├── test.ef
├── test.gh
└── test.sh

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

mksquashfs test test.package -wildcards -e '*.db'

mksquashfs test test.package -regex -e '\.db$'

上面的一些解决方案是从以下 link 中提供的,但我遇到了无法排除所有“.db”文件的死胡同。 https://askubuntu.com/questions/628585/mksquashfs-not-excluding-file

此信息包含在 Squashfs RELEASE-README 中

除了wildcards/regex表达式外,排除文件可以是"anchored"或 "non-anchored"。锚定排除是从根匹配的 目录而不是其他任何地方,非锚定排除匹配任何地方。为了 给定目录层次结构 "a/b/c/a/b" 的示例,锚定排除 "a/b" 将匹配目录层次结构根部的 "a/b",但是 它不会匹配目录 "c" 中的“/a/b”子目录,而 非锚定排除会。

非锚定排除

默认情况下从顶级目录中排除匹配项,但它是 通常用于排除源目录中任何位置匹配的文件。 为此,可以使用非锚定排除,通过预先固定 用“...”排除。

示例:

  1. mksquashfs 示例 image.sqsh -wildcards -e '... *.gz'

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

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

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

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

  3. mksquashfs 示例 image.sqsh -wildcards -e '... !(data).gz'

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