mksquashfs不排除文件

时间:2017-08-07 21:13:14

标签: regex wildcard squashfs

我遇到了从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

1 个答案:

答案 0 :(得分:2)

此信息包含在Squashfs RELEASE-README

除了通配符/正则表达式之外,排除文件可以是"锚定"要么 "非锚定&#34 ;.锚定排除是从根的匹配的排除 目录和其他地方,非锚定排除匹配任何地方。对于 给定目录层次结构的示例" a / b / c / a / b",锚定排除 " A / B"将匹配" a / b"在目录层次结构的根目录,但是 它不会与" / a / b"目录中的子目录" c",而a 非锚定排除会。

非锚定排除

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

示例:

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

    排除符合" * .gz"的文件源目录中的任何位置。  例如,这将匹配" example.gz"," test / example.gz",和  "测试/检验/ example.gz"

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

    排除符合" * .gz"的文件内部目录名为"测试"要么  "测试"发生在源目录中的任何地方。

    同样,使用扩展通配符也可以进行负匹配。

  3. mksquashfs示例image.sqsh -wildcards -e' ...!(数据)。gz'

    排除所有符合" * .gz"的文件在源目录中的任何位置,  除了那些带有"数据"在名称中。