如何使用 mksquashfs -regex?

How to use mksquashfs -regex?

我想 mksquashfs 一个 chroot,并包含 /cdrom 目录,但排除其中的所有内容。我已经知道如何使用 -wildcards 执行此操作,但我想看看 -regex 是否有错误。测试用例:

cd $(mktemp -d)
mkdir -p cdrom cdrom2/why
mksquashfs . /tmp/chroot.squashfs -info -noappend -regex -e '^cdrom/.*$'

问题是cdrom2/why被遗漏了!在我看来,“/”实际上在那里被忽略了。这是 mksquashfs 错误吗?

这是因为您没有完全理解正则表达式在 Mksquashfs 排除文件中的工作原理。

如果使用通配符,则排除文件基本上被视为一系列由斜杠 (/) 分隔的通配符文件,即 wildcard1/wildcard2/wildcard3,将匹配 wildcard1 与顶级目录,wildcard2 与子目录等.

指定-regex 只是将通配符匹配替换为正则表达式匹配。它仍然被评估为由斜杠 (/) 分隔的正则表达式,即 regex1/regex2/regex3.

在您的示例中,正则表达式“^cdrom”针对顶级目录中的文件进行评估,并且匹配 "cdrom" 和 "cdrom2"。

如果你想让正则表达式只匹配 "cdrom" 你应该使用

mksquashfs。 /tmp/chroot.squashfs -info -noappend -regex -e '^cdrom$/.*'