Pythonのtarfileモジュールを使用してtar.gzアーカイブを抽出しようとしています。
抽出によって、すでに存在するターゲットファイルを上書きしたいのですが、これはtarfileの通常の動作です。
ただし、一部のファイルで書き込み保護がオンになっているという点で問題が発生しています(chmod 550など)。
操作はtarfile.extractall()実際には失敗します:
IOError: [Errno 13] Permission denied '/foo/bar/file'
通常のコマンドラインからファイルを削除しようとすると、それを実行できます。プロンプトに応答するだけです。
$ rm <filename>
rm: <filename>: override protection 550 (yes/no)? yes
通常のGNUtarユーティリティも、これらのファイルを簡単に処理します。抽出すると、ファイルが上書きされるだけです。
私のユーザーはファイルの所有者であるため、tarfile.extractallを実行する前にターゲットファイルを再帰的にchmodすることは難しくありません。または、shutil.rmtreeを使用して、事前にターゲットを吹き飛ばすことができます。これは、現在使用している回避策です。ただし、これは少しハックな感じがします。
tarfile内の読み取り専用ファイルの上書き、例外の使用などを処理する、よりPython的な方法はありますか?