mksquashfs не исключая файл

У меня проблемы с исключением конкретного файла из 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

1 ответ

Решение

Эта информация содержится в Squashfs RELEASE-README

В дополнение к групповым выражениям / регулярным выражениям файлы исключений могут быть "привязанными" или "не привязанными". Привязанное исключение - это то, которое совпадает с корнем каталога, и нигде больше, не привязанное исключение сопоставляется где угодно. Например, учитывая иерархию каталогов "a/b/c/a/b", привязанное исключение "a/b" будет соответствовать "a/b" в корне иерархии каталогов, но не будет соответствовать "/a". / b "подкаталог в каталоге"c", тогда как исключение без привязки будет.

Без якоря исключает

По умолчанию исключает совпадение из каталога верхнего уровня, но часто бывает полезно исключить сопоставление файлов в любом месте исходных каталогов. Для этого могут быть использованы не привязанные исключения, указанные с помощью предварительной фиксации исключения с помощью "...".

Примеры:

  1. Пример mksquashfs image.sqsh -wildcards -e '... *.gz'

    Исключить файлы, соответствующие "*.gz", в любом месте исходных каталогов. Например, это будет соответствовать "example.gz", "test / example.gz" и "test / test / example.gz".

  2. Пример mksquashfs image.sqsh -wildcards -e '... [Tt]est/*.gz'

    Исключите файлы, соответствующие "*.gz" внутри каталогов, называемых "Test" или "test", которые встречаются в любом месте в исходных каталогах.

    Опять же, с использованием расширенных подстановочных знаков, также возможно отрицательное сопоставление.

  3. Пример mksquashfs image.sqsh -wildcards -e '...! (data).gz'

    Исключите все файлы, соответствующие "*.gz", в любом месте исходных каталогов, кроме тех, в имени которых содержится "data".

Другие вопросы по тегам