Help us understand the problem. What is going on with this article?

【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

LemonmanNo39
強くなりたい。ただそれだけです。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした