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以上であると仮定します(注:優先順位)。umask
umask
umask
-chmod
tar
私のテストでは、GNUbsdtar
私 。おそらく存在する場合は、それを抽出しようとしています。star
tar
すでに検索権限のないディレクトリdist
(たとえば、同様の権限が破損した類似のアーカイブを抽出したため)
アーカイブを抽出する前に、これらの権限を変更する必要があります。