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
。