GNU/Linux >> Linux の 問題 >  >> Linux

Windows が適切なファイル名を持つように、Linux で zip / tgz を作成するにはどうすればよいですか?

<ブロック引用>

現在、tar はファイル名を UTF でエンコードします

実際、tar はファイル名をまったくエンコード/デコードしません。ファイルシステムからファイルをそのままコピーするだけです。ロケールが UTF-8 ベースの場合 (多くの最新の Linux ディストリビューションのように)、それは UTF-8 になります。残念ながら、Windows ボックスのシステム コードページは決して UTF-8 ではないため、文字セットの変更を許可する WinRAR などのツールを除いて、名前は常にマングルされます。

そのため、さまざまな国の Windows リリースと組み込みの圧縮フォルダー サポートで機能する非 ASCII ファイル名の ZIP ファイルを作成することはできません。

tar および zip 形式の欠点は、固定または提供されたエンコーディング情報がないため、非 ASCII 文字は常に移植性がありません。 ASCII 以外のアーカイブ形式が必要な場合は、最新の 7z や rar などの新しい形式のいずれかを使用する必要があります。残念ながら、これらはまだ不安定です。 7zip では -mcu が必要です コードページにない文字を検出しない限り、rar は UTF-8 を使用しません。

基本的にこれはひどい混乱であり、ASCII 以外の文字を含むファイル名を含むアーカイブの配布を避けることができれば、はるかにうまくいくでしょう.


Windows で UNIX から tar ファイルを解凍するために私が書いた簡単な Python スクリプトを次に示します。

import tarfile

archive_name = "archive_name.tar"

def recover(name):
    return unicode(name, 'utf-8')

tar = tarfile.open(name=archive_name, mode='r', bufsize=16*1024)
updated = []
for m in tar.getmembers():
    m.name = recover(m.name)
    updated.append(m)

tar.extractall(members=updated)
tar.close()

Linux でデフォルトの tar を使用する問題 (GNU tar)、解決されました... --format=posix を追加します ファイル作成時のパラメータ。

例えば:
tar --format=posix -cf

Windows では、ファイルを抽出するために bsdtar を使用します。

https://lists.gnu.org/archive/html/bug-tar/2005-02/msg00018.html に書かれています (2005 以降) !!):

<ブロック引用>

> UTF-8 がサポートされていることについて ChangeLog で読みました。何が
> ということですか?
> 交換可能なアーカイブを作成する方法が見つかりませんでした
> 異なるロケール間。

POSIX.1-2001 形式 (tar --format=posix または --format=pax) でアーカイブを作成する場合、tar はファイル名を現在のロケールから UTF-8 に変換し、アーカイブに保存します。抽出時は逆の操作を行います。

追記--format=posix と入力する代わりに -H pax と入力できます 、これは短いです。


Linux
  1. (C/C++) Windows と Linux の両方で実行できる実行可能ファイルを生成する方法は?

  2. Unix で .tgz ファイルを tar でパスワード保護するにはどうすればよいですか?

  3. Linux で、DVD や USB なしで Windows 7 をインストールするにはどうすればよいですか?

  1. Linuxでパスワードで保護されたZIPファイルを作成する方法

  2. C++/Linux でディレクトリ ツリーを作成するにはどうすればよいですか?

  3. Linux で複数のダミー インターフェイスを作成するにはどうすればよいですか?

  1. Linuxでgrepを使用してファイル名だけを表示するにはどうすればよいですか?

  2. Mac 上のディレクトリの Linux 互換 zip アーカイブを作成する方法

  3. Linux でマルチパート tar ファイルを作成するにはどうすればよいですか?