tarコマンドで作成されたディレクトリには777権限がありません。

tarコマンドで作成されたディレクトリには777権限がありません。

tarファイルの抽出中にエラーが発生しました。作成されたディレクトリは、777の代わりにchmod 666を使用して作成されました。したがって、そのフォルダ内では抽出されません。

これは私のコマンドです:

$umask 000 && tar -xvzf compress.tgz
tar: dist/assets: Cannot mkdir: Permission denied
tar: dist/assets/favicon.ico: Cannot open: Permission denied

$ls -ll
drw-rw-rw- 2 user grp    4096 Mar 14 16:43 assets

私はこのモジュールをローカルで使用してファイルを圧縮します。

https://www.npmjs.com/package/tar

mkdirを使用してディレクトリを作成すると、777モードが提供されます。何が欠けていますか?

要求通り:

-bash-4.2$ tar tzvf compress.tgz
drw-rw-rw- 0/0               0 2018-03-15 12:17 dist/
-rw-rw-rw- 0/0           13117 2018-03-15 12:17 dist/3rdpartylicenses.txt
drw-rw-rw- 0/0               0 2018-03-15 12:17 dist/assets/

抽出して使用しています--strip 1

答え1

出力に見られるように、tar tvアーカイブ自体に対する権限が破損しています。このアーカイブを生成したツールを制御できる場合は、それを修正するかバグを報告することをお勧めします。

破損したアーカイブからファイルを抽出する必要があるとします。この試み:

tar xzvf compress.tgz --delay-directory-restore
find dist -type d -exec chmod a+x {} \;

+(この場合は末尾は使用できません。固定サブディレクトリにドロップダウンできるchmodように、一度に1つのディレクトリに適用findする必要があるためです。) . 特殊文字ですが、代わりにfind... -execリテラルとして) に渡されます。

答え2

star(from)を使用すると、schily-tools次のように抽出できます。

star xf file.tgz -no-p -find -type d -chmod a+x

解凍したディレクトリに実行権限(全員)を追加して、アーカイブの偽の権限を変更します。

これはrootとして実行されている場合-no-pにも当てはまり、あまりにも広い書き込み権限も変更する002以上であると仮定します(注:優先順位)。umaskumaskumask-chmod

tar私のテストでは、GNUbsdtar私 。おそらく存在する場合は、それを抽出しようとしています。startarすでに検索権限のないディレクトリdist(たとえば、同様の権限が破損した類似のアーカイブを抽出したため)

アーカイブを抽出する前に、これらの権限を変更する必要があります。

関連情報