ファイルシステムで使用されているものとは異なる文字エンコーディングを使用してファイル名を解凍します。

ファイルシステムで使用されているものとは異なる文字エンコーディングを使用してファイル名を解凍します。

ISO-8859-1やその他のUnicode以前のスキームでエンコードされたファイル名を含むタールボールが時折受信されることがあります。私のシステムはUTF-8を使用しているため、tar xvf foo.tar一般的なオプション()を使用してこれらのアーカイブを解凍すると、mojibakeファイル名でいっぱいのディレクトリが作成されます。

これまで私は使ってきました。convmvファイル名をUTF-8に変換後ろに彼らは抽出されました。影響を受けた各ファイルを呼び出すか、ファイルの圧縮をconvmv新しいディレクトリにconvmv展開し、ディレクトリ全体で実行してから元の場所にファイルを移動する必要があるため、これは少し不便です。この機能をシェルスクリプトでエンコードできない場合は、解凍時にアーカイブファイル名をすぐにUTF-8に変換する方法はありますか?

ベストアンサー1

tarこれは、抽出前にメモリの名前を変更する小さなファイル抽出器です。

#!/usr/bin/python27

import tarfile

def transform(data):
    u = data.decode('latin1')
    return u.encode('utf8')

tar = tarfile.open('archive.tar')
for m in tar.getmembers():
    m.name = transform(m.name)

tar.extractall()

警告する:GNUとは異なり、tarこの抽出器は先行文字を削除しません/。この抽出器にチェックロジックをtar追加するかtar -t

おすすめ記事