2017-08-07 175 views
0

我有问题,从squashfs中排除特定文件。我希望能够排除以* .db结尾但没有运气的所有文件类型。mksquashfs不包括文件

每当我使用参数运行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”的文件。 https://askubuntu.com/questions/628585/mksquashfs-not-excluding-file

回答

1

该信息被包含在Squashfs的RELEASE-自述

除了通配符/正则表达式的表达式,排除文件可以是“锚定”或 “非锚定的”。锚定排除是一种与 目录的根相匹配的排除排除,无锚定的排除可在任何地方匹配。对于 给出目录层次结构“a/b/c/a/b”的示例,锚定排除 “a/b”将与目录层次结构根目录中的“a/b”匹配,但 它不匹配目录“c”中的“/ a/b”子目录,而非锚定排除将会。

非固定排除

通过从顶级目录默认排除比赛,但它是 排除在源目录的任何地方配套文件通常很有用。 对于此非锚定排除项可以使用,通过预先排除“...”排除 排除项。

例子:

  1. mksquashfs例如image.sqsh -wildcards -e '... *。广州'

    排除匹配的文件 “*。广州” 任何地方的源目录。 例如,这将匹配“example.gz”,“test/example.gz”和 “test/test/example.gz”。

  2. mksquashfs例如image.sqsh -wildcards -e '...... [Tt的] EST/*。GZ'

    排除匹配的文件 “*。广州” 里面的目录名为 “测试” 或 “测试”发生在源目录中的任何地方。

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

  3. mksquashfs例如image.sqsh -wildcards -e '...!(数据)。广州'

    排除匹配的所有文件 “*。广州” 的源目录的任何地方, 除了那些“数据”的名称。

+0

看起来像三个点和一个空间是我需要的!这解决了问题!谢谢! – tardis89

+0

'mksquashfs test test.package -wildcards -e'... * .db'是修复它所需要的。 – tardis89