Intereting Posts
запрос повторно выполняется для сценариев цикла параллельно Использование физического физического жесткого диска в виртуальной машине с умными возможностями и истинным номером модели Графический интерфейс Octave не запускается на Ubuntu 16.04 Задержка systemd, если файл существует ld-uClibc.so отсутствует vmware centos7 диск полный? Есть ли способ ограничить доступ приложения к системному времени в Linux? Почему моя клавиатура вводит неправильные буквы? Понимание встроенного чтения Нормально ли, что модалия соответствует различным устройствам? Можно ли запустить iCloud Drive на Ubuntu? xdotool и xbindkeys Руководство по сборке ядра Linux: результирующий двоичный файл в 10 раз больше, чем предварительно скомпилированные двоичные файлы Postfix: Исходящий фильтр электронной почты + отправка отправленного письма в папку Загрузите контент из определенного <div> с помощью wget

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

Когда я создаю образ squashfs из нескольких каталогов, таких как:

  • / Бен /
  • / USR / бен /
  • / USR / местные / бен /
  • / Некоторые / другие / случайная / папка /
  • / Другой / длинный / путь /

Если я использую команду …

mksquashfs /bin /usr/bin /usr/local/bin /some/other/random/folder /another/long/path MyNewImage.squashfs 

Это дает мне изображение с этими папками верхнего уровня:

  • бен /
  • bin_1 /
  • bin_2 /
  • папка /
  • дорожка/

Я хочу, чтобы мое изображение содержало полные пути из исходной файловой системы:

  • бен /
  • USR / бен /
  • USR / местные / бен /
  • некоторые / другие / случайная / папка /
  • другой / длинный / путь /

Есть ли простой способ сделать это без предварительного копирования или перемещения оригинальных файлов перед созданием изображения?

    man 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. 

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

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

     $ mkdir -pa/bd/ed/e2 $ touch a/b/cd/e/fd/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 файловой системы с помощью 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 -pa/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