mksquashfs: как включать полные абсолютные пути к каталогам в изображении squashfs?

Вы можете попробовать

while true; do ps -eo pcpu,pid,user,args | sort -k 1 -r | head -10 >> logfile.txt; echo "\n" >> logfile.txt; sleep 3; done

Этот скрипт покажет вам десять лучших процессов по использованию процессора.

2
30.07.2018, 11:32
3 ответа

человек mksquashfs:

   -keep-as-directory
       if  one source directory is specified, create a root directory con‐
       taining that directory, rather than the contents of the directory.
0
27.01.2020, 22:17

Наверное, нет простого пути ,но вы можете сделать это с большим усилием, используя расширенный синтаксис исключения подстановочных знаков. Это может быть не задокументировано на странице руководства, но больше упоминается в README . Однако для получения подробной информации о синтаксисе вам необходимо просмотреть справочную страницу для fnmatch(3).

По сути, вы можете использовать !(somedir)в качестве исключения для , а не исключения, так что в итоге вы включите только этот каталог. Представьте, что у вас есть следующий пример дерева в/tmp

$ mkdir -p a/b   d/e   d/e2
$ touch    a/b/c d/e/f d/e2/f2

, и вы хотите скопировать только aи d/e, сохранив при этом эти полные пути. Вы можете использовать

$ echo '!(a)' >exclude
$ mksquashfs /tmp mysq -ef exclude -wildcards
$ echo -e '!(d)/\nd/!(e)' >exclude
$ mksquashfs /tmp mysq -ef exclude -wildcards

Перечисление файловой системы с помощью unsquashfs -l mysqприводит к выводу

squashfs-root/a
squashfs-root/a/b
squashfs-root/a/b/c
squashfs-root/d
squashfs-root/d/e
squashfs-root/d/e/f

Каждый раз исходным каталогом является /tmp, но в первый раз мы исключаем все, кроме каталога a, а во второй раз мы исключаем все, кроме каталогов dи d/e. При этом используется многоуровневый файл исключения -, где в каждой строке мы исключаем еще один шаг каталога в пути, кроме того, который должен быть сохранен.


Более простое решение состоит в том, чтобы где-то создать желаемую иерархию каталогов и mount -bindконечный каталог в реальном каталоге. Например,

$ mkdir -p a/usr/local/bin a/some/other/bin
$ sudo mount -o bind /usr/local/bin a/usr/local/bin
$ sudo mount -o bind /some/other/bin a/some/other/bin
$ mksquashfs a ~/mysq
$ sudo umount a/usr/local/bin a/some/other/bin
2
27.01.2020, 22:17

Основано на ответе @meuh (, который мне было немного трудно понять):

mksquashfs / MyNewImage.squashfs -wildcards -e \
  !(bin|usr|some|another) \
  usr/!(bin|local) \
  usr/local/!(bin) \
  some/!(other) \
  some/other/!(random) \
  some/other/random/!(folder) \
  another/!(long) \
  another/long/!(path)

Я также был бы рад получить более понятную и краткую возможность и подал запрос на ее добавление:https://github.com/plougher/squashfs-tools/issues/80.

0
27.01.2020, 22:17

Теги

Похожие вопросы