gpt4 book ai didi

regex - mksquashfs 不排除文件

转载 作者:行者123 更新时间:2023-12-02 03:50:39 24 4
gpt4 key购买 nike

我在从 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”文件的死胡同。 https://askubuntu.com/questions/628585/mksquashfs-not-excluding-file

最佳答案

此信息包含在 Squashfs RELEASE-README 中

除了通配符/正则表达式外,排除文件还可以“锚定”或“非锚定”。锚定排除是从根匹配的目录而不是其他任何地方,非锚定排除匹配任何地方。为了给定目录层次结构“a/b/c/a/b”的示例,锚定排除“a/b”将匹配目录层次结构根部的“a/b”,但是它不会匹配目录“c”中的“/a/b”子目录,而 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'

    在名为“Test”或“Test”的目录中排除与“*.gz”匹配的文件出现在源目录中任何地方的“测试”。

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

  1. mksquashfs 示例 image.sqsh -wildcards -e '... !(*data*).gz'

    排除源目录中任何位置匹配“*.gz”的所有文件,名称中带有“数据”的除外。

关于regex - mksquashfs 不排除文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45555796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com