現在のディレクトリに複数のファイルがある場合は、解凍すると、特定のディレクトリに配置できるように圧縮できるようになります。たとえば、次のものがあるとします$PWD
。
ls
fsck
xz
chroot
を実行すると、unzip foo.zip
すべて次のディレクトリに抽出されます。
/bin
/sbin
/usr/bin
/usr/sbin
私が見つけることができる最も近いのは、ファイルを抽出したいディレクトリパス($PWD
ルートディレクトリとして使用されます)にこのファイルがすでに存在している必要があることです。
$ zip foo.zip bin/ls sbin/fsck usr/bin/xz usr/sbin/chroot
次に、抽出するシステムで次のことを行う必要があります。
$ cd /
$ sudo unzip foo.zip
ベストアンサー1
このコマンドを使用してこれを行う方法が見つかりませんでしたが、zip
Pythonでは簡単です。
ご注意ください、zipファイル形式の仕様セクション 4.4.17.1 では、パス名が "/" で始まらないことが示されているので、その部分については役に立ちません。
Python圧縮ファイルzipアーカイブにファイルを追加すると、モジュールを使用してファイルのパス名をオーバーライドできます。必要な名前をオプションの2番目の引数として渡すだけですZipFile.write
。
ZipFile.write(filename[, arcname[,compress_type]]) は、
filename というファイルをアーカイブに書き込み、アーカイブ名 arcname を指定します (デフォルトでは filename と同じですが、ドライブ文字はなく、先行パスを含む)。区切り文字が削除されました)。与えられた場合、compress_typeは新しいエントリのコンストラクタに提供された圧縮引数の値をオーバーライドします。
注:アーカイブ名はアーカイブルートに基づいている必要があります。つまり、パス区切り文字で始めてはいけません。
例は次のとおりです。
$ touch 1 2 3
$ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
>>> import zipfile
>>> with zipfile.ZipFile('bundle.zip', 'w') as bundle:
... bundle.write('1', '/bin/1')
... bundle.write('2', '/sbin/2')
... bundle.write('3', '/usr/bin/3')
...
>>>
$ unzip -l bundle
Archive: bundle.zip
Length Date Time Name
--------- ---------- ----- ----
0 2014-08-11 13:00 bin/1
0 2014-08-11 13:00 sbin/2
0 2014-08-11 13:00 usr/bin/3
--------- -------
0 3 files
zipfile.write
標準に準拠するために、パス名から先行する「/」が削除されます。