Edited at

【Python】 圧縮されたファイルを一気に解凍したる!


はじめに

【背景】

サーバ内部にあるミドルウェアのバックアップを取得しtarボールで固めて、ローカルに移動してから、そのtarボールを解凍してから次のめんどいことに気づきました。

※背景のストーリーは気にせずお願いします。。

【問題】

解凍されたtarボールの内部にフォルダが大量にあって、その中身に結構な数でtarボールがそれぞれのフォルダに散らばっている・・・。一気に解凍したい。

【解決】

オレヤル。


内容


結論

大量のフォルダがあって、その中にtarボールが大量にあって一度に解凍できないときとかに便利です。

いちいちボタンポチポチとかだるすぎるので、作りました。

** 退屈なことはPythonにやらせよう! **ですね。

import os

import sys
import tarfile
argvs = sys.argv

# コマンドライン引数で実行したいファイルを指定
# C:/Users/username/hogehoge/ とか
PATH = argvs[1]

# 特定のディレクトリをなめる
def files(path):
for pathname, dirnames, filenames in os.walk(path):
for filename in filenames:
yield os.path.join(pathname, filename)

# tarボールの解凍
def extract_tar_file(dirname, path):
with tarfile.open(path, 'r:*') as tar:
tar.extractall(dirname)

if __name__ == '__main__':
for path in files(PATH):
if path.endswith('.tar.gz'):
path = path.replace('\\','/')
# tarボールを保存している一つ一つのディレクトリ抽出
dirname, basename = os.path.split(path)
extract_tar_file(dirname, path)

※エラー処理等々はしていないので、適当に入れていただければ。

参考記事にさせていた大内容がわかりやすくとても助かりました。

ありがとうございます!


追記

解凍先が上記のスクリプトで強制されているの自分で書いてキモイと思ったので、以下のように解凍先もコマンドライン引数で指定してやると解凍先も選べます。

# 解凍先をコマンドライン引数で

# C:/Users/username/hogehoge/hogehoge/ とか
EXT_DIR = argvs[2]

# tarボールの解凍
def extract_tar_file(path):
with tarfile.open(path, 'r:*') as tar:
tar.extractall(EXT_DIR)


結論

スクリプト組まなくていいから、LhaplusとかCubeIceダウンロードして一気に解凍しようぜ!笑


参考

https://qiita.com/hasepy/items/8e6a0757da1ce074ce87