0

我想 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 错误吗?

4

1 回答 1

0

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

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

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

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

如果您希望正则表达式仅匹配“cdrom”,您应该使用

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

于 2019-08-01T21:36:45.627 回答