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", тогда как исключение без привязки будет.
Без якоря исключает
По умолчанию исключает совпадение из каталога верхнего уровня, но часто бывает полезно исключить сопоставление файлов в любом месте исходных каталогов. Для этого могут быть использованы не привязанные исключения, указанные с помощью предварительной фиксации исключения с помощью "...".
Примеры:
Пример mksquashfs image.sqsh -wildcards -e '... *.gz'
Исключить файлы, соответствующие "*.gz", в любом месте исходных каталогов. Например, это будет соответствовать "example.gz", "test / example.gz" и "test / test / example.gz".
Пример mksquashfs image.sqsh -wildcards -e '... [Tt]est/*.gz'
Исключите файлы, соответствующие "*.gz" внутри каталогов, называемых "Test" или "test", которые встречаются в любом месте в исходных каталогах.
Опять же, с использованием расширенных подстановочных знаков, также возможно отрицательное сопоставление.
Пример mksquashfs image.sqsh -wildcards -e '...! (data).gz'
Исключите все файлы, соответствующие "*.gz", в любом месте исходных каталогов, кроме тех, в имени которых содержится "data".