我遇到了从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$'
上面的一些解决方案是通过以下链接提供的,但我遇到了一个死胡同,我无法排除所有的“.db”#39;文件。 https://askubuntu.com/questions/628585/mksquashfs-not-excluding-file
答案 0 :(得分:2)
此信息包含在Squashfs RELEASE-README
中除了通配符/正则表达式之外,排除文件可以是"锚定"要么 "非锚定&#34 ;.锚定排除是从根的匹配的排除 目录和其他地方,非锚定排除匹配任何地方。对于 给定目录层次结构的示例" a / b / c / a / b",锚定排除 " A / B"将匹配" a / b"在目录层次结构的根目录,但是 它不会与" / a / b"目录中的子目录" c",而a 非锚定排除会。
非锚定排除
默认情况下,从顶级目录中排除匹配,但它是 通常用于排除源目录中任何位置匹配的文件。 对于这种非锚定的排除可以使用,通过预先固定指定 排除" ..."。
示例:
mksquashfs示例image.sqsh -wildcards -e' ... * .gz'
排除符合" * .gz"的文件源目录中的任何位置。 例如,这将匹配" example.gz"," test / example.gz",和 "测试/检验/ example.gz"
mksquashfs示例image.sqsh -wildcards -e' ... [Tt] est / * .gz'
排除符合" * .gz"的文件内部目录名为"测试"要么 "测试"发生在源目录中的任何地方。
同样,使用扩展通配符也可以进行负匹配。
mksquashfs示例image.sqsh -wildcards -e' ...!(数据)。gz'
排除所有符合" * .gz"的文件在源目录中的任何位置, 除了那些带有"数据"在名称中。