ファイルを解凍せずにzip内のファイルの権限を変更する方法はありますか?明確にするには、ファイルの内容を変更するのではなく、ファイルに設定されているUnix権限を変更することです。ファイルを抽出して更新する以外は答えが見つかりませんでした。
ベストアンサー1
はい、時々。詳細をあまり深く扱うことなく、Zipファイルには各ファイルの項目のリストがあり、最後にそれを要約する別の項目があります。これらの項目は、ツール(およびそのバージョン)、ファイルシステム、Zip形式などによってファイル権限がある場合とない場合がありますが、ファイル権限がある場合は変更できます。
次のステップはDebian 10でテストされました。
zipファイルを作成しましょう。
$ echo "This is file 1" > file1.txt
$ chmod 777 file1.txt
$ echo "This is file 2" > file2.txt
$ chmod 555 file2.txt
$ zip files file?.txt
次に、ファイルと権限を一覧表示します。
$ zipinfo files.zip
Archive: files.zip
Zip file size: 344 bytes, number of entries: 2
-rwxrwxrwx 3.0 unx 15 tx stor 20-Jun-08 18:35 file1.txt
-r-xr-xr-x 3.0 unx 15 tx stor 20-Jun-08 18:30 file2.txt
2 files, 30 bytes uncompressed, 30 bytes compressed: 0.0%
これでアイテムを手動で繰り返すことができますが、すでにこれを実行して結果を印刷するプログラムがあります。
$ zipdetail files.zip
これは多くの情報を出力します。左側にはオフセットがあり、その横には各フィールドの名前と内容があります。
私たちはただ各ファイルが欲しいExt File Attributes
:
$ zipdetails files.zip | egrep "Ext File Attributes|Filename"
001A Filename Length 0009
001E Filename 'file1.txt'
006C Filename Length 0009
0070 Filename 'file2.txt'
00C0 Filename Length 0009
00CA Ext File Attributes 81FF0000
00D2 Filename 'file1.txt'
010F Filename Length 0009
0119 Ext File Attributes 816D0001
0121 Filename 'file2.txt'
それでは、(オフセット(10進数281、ファイル属性)のファイル属性)を書き、バイト順序をfile2.txt
考慮して権限を変更しましょう。777
0x81FF0000
file1.txt
0x0119
file2.txt
$ printf "\x00\x00\xff\x81" | dd of=files.zip bs=1 seek=281 count=4 conv=notrunc
内容を再リストしてください。
$ zipinfo files.zip
Archive: files.zip
Zip file size: 344 bytes, number of entries: 2
-rwxrwxrwx 3.0 unx 15 tx stor 20-Jun-08 18:35 file1.txt
-rwxrwxrwx 3.0 unx 15 tx stor 20-Jun-08 18:30 file2.txt
2 files, 30 bytes uncompressed, 30 bytes compressed: 0.0%
これで、両方のファイルが同じ権限を共有します。
独自の権限を設定したい場合は、Zipの既存のファイルからコピーまたは確認できます。ここ。