Mac OS Xシステムで作業しているというコメントを投稿しました。これは、これらの._*
ファイルの目的に対する重要な手がかりです。
これらの._*
アーカイブエントリは、対応するファイル(プレフィックスのないファイル)に関連付けられた追加情報を含むAppleDoubleデータのチャンクです._
。これらは、Mac OS X固有のcopyfile(3)関数ファミリによって生成されます。AppleDouble Blobは、アクセス制御データ(ACL)と拡張属性(通常、Finderフラグと「リソースフォーク」を格納しますが、xattrsはあらゆる種類のデータを格納するために使用できます)を格納します。
システムが提供するMac OS Xアーカイブツール(bsdtar
(としてもシンボリックリンクtar
)、、gnutar
およびpax
)._*
は、拡張情報が関連付けられているファイルのアーカイブメンバーを生成します。「アーカイブ解除」モードでは、それらのアーカイブメンバーもデコードし、結果の拡張情報を関連ファイルに適用します。これにより、HFS +ファイルシステムが保存できるすべての情報を保存し、後で抽出することにより、Mac OS Xシステムで使用するための「完全忠実」アーカイブが作成されます。
他のシステムの対応するアーカイブツールは、これらの._*
ファイルに特別な処理を行うことを知らないため、通常のファイルとして解凍されます。このようなファイルは他のシステムではほとんど役に立たないため、多くの場合「ジャンクファイル」と見なされます。同様に、Mac OS X以外のシステムがで始まる通常のファイルを含むアーカイブを生成する._
場合、Mac OS Xのアーカイブ解除ツールはそれらのファイルを拡張情報としてデコードしようとします。
ただし、システムが提供するMac OS Xアーカイバを他のUnixyシステムと同じように動作させる文書化されていない(?)方法があります:COPYFILE_DISABLE環境変数。この変数を(空の文字列でも任意の値に)設定すると、アーカイバ._*
はアーカイブファイルに関連付けられた拡張情報を表すアーカイブメンバーを生成できなくなります。また、アーカイバがそのようなアーカイブメンバーを拡張情報として解釈しようとするのを防ぎます。
COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …
頻繁にこの方法で作業したい場合は、シェルの初期化ファイルでこの変数を設定できます。
# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE
次に、(拡張情報を保存/復元するために)機能を再度有効にする必要がある場合、個々のコマンドの変数を「設定解除」できます。
(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)
Mac OS X 10.4のアーカイバも同様のことを行いますが、異なる環境変数を使用します:COPY_EXTENDED_ATTRIBUTES_DISABLE