mksquashfs:squashfsイメージに絶対ディレクトリパス全体を含める方法は?

mksquashfs:squashfsイメージに絶対ディレクトリパス全体を含める方法は?

たとえば、複数のディレクトリから squashfs イメージを作成する場合:

  • /ゴミ箱/
  • /usr/bin/
  • /usr/ローカル/空/
  • /一部/その他/ランダム/フォルダ/
  • /他/長い/パス/

命令を使用すると...

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

次のトップレベルフォルダを含む画像を提供します。

  • ゴミ箱/
  • bin_1/
  • bin_2/
  • フォルダ/
  • 道/

私の画像に元のファイルシステムのフルパスが含まれていることを望みます。

  • ゴミ箱/
  • ユーザー/空/
  • ユーザー/ローカル/空/
  • 一部/その他/ランダム/フォルダ/
  • 別の/長い/道路/

画像を作成する前に元のファイルをコピーまたは移動せずに簡単に行う方法はありますか?

答え1

@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

修正する

-no-strip最新バージョンではこのオプションを使用できます。

mksquashfs /bin /usr/bin /usr/local/bin \
    /some/other/random/folder /another/long/path \
    MyNewImage.squashfs -no-strip

答え2

おそらくそうではありません。簡単な方法ただし、拡張ワイルドカード除外構文を使用すると、これを行うことができます。これはマニュアルページに文書化されていないかもしれませんが、閲覧ファイル。ただし、構文の詳細はマニュアルページを確認する必要があります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最初はディレクトリを除くすべてを除き、a2番目は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

答え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.

関連情報