たとえば、複数のディレクトリから 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
最初はディレクトリを除くすべてを除き、a
2番目は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.