特定のディレクトリ(もちろんそのサブディレクトリを含む)のtarアーカイブを作成したいと思います。しかし、tarコマンドを使用して実行すると、含まれているファイルのリストが表示されます。例:
calendar_final /._ style.css
calendar_final / style.css
ご覧のとおり、同じファイルには2つのバージョンがあります。これはすべてのファイルに当てはまり、多くのファイルがあります。 ._プレフィックスが付いた一時ファイルをtarアーカイブから除外するにはどうすればよいですか?
承認された回答:
MacOSXシステムで作業しているというコメントを投稿しました。これは、これらの._*
の目的に対する重要な手がかりです。 ファイル。
これらの._*
アーカイブエントリは、対応するファイル(._
のないファイル)に関連付けられた追加情報を含むAppleDoubleデータのチャンクです。 プレフィックス)。これらは、Mac OSX固有のcopyfile(3)によって生成されます。 関数のファミリー。 AppleDouble BLOBは、アクセス制御データ(ACL)と拡張属性(通常、 Finder )を格納します フラグと「リソースフォーク」ですが、xattrsを使用してあらゆる種類のデータを保存できます。
システム提供のMacOSXアーカイブツール(bsdtar
(tar
ともシンボリックリンクされています )、gnutar
、およびpax
)は._*
を生成します 拡張情報が関連付けられているファイルのアーカイブメンバー。 「アーカイブ解除」モードでは、それらのアーカイブメンバーもデコードし、結果の拡張情報を関連ファイルに適用します。これにより、HFS +ファイルシステムが保存できるすべての情報を保存し、後で抽出することで、MacOSXシステムで使用するための「完全忠実な」アーカイブが作成されます。
他のシステムの対応するアーカイブツールは、これらの._*
に特別な処理を与えることを知りません。 ファイルなので、通常のファイルとして解凍されます。このようなファイルは他のシステムではかなり役に立たないため、「ジャンクファイル」と見なされることがよくあります。同様に、Mac以外のOS Xシステムが、._
で始まる通常のファイルを含むアーカイブを生成する場合 、Mac OS Xアーカイブ解除ツールは、これらのファイルを拡張情報としてデコードしようとします。
ただし、システム提供のMac OS Xアーカイバーを他のUnixシステムと同じように動作させるための文書化されていない(?)方法があります。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
関連:一時ファイルなしでSTDERRとSTDOUTを異なる変数にリダイレクトしますか?