web-dev-qa-db-ja.com

Mac tarを入手して、._ *ファイル名をtarアーカイブに保存しない

重複の可能性:
OS Xのtarballで._fooのようなファイルを取得するのはなぜですか?

Macでautoconfスクリプトを作成します。 tarが実行されると、これらの._foobarの名前がす​​べてアーカイブに入れられます。

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

現在起こっているのは、AppleのHFSファイルシステムがファイルのプロパティを._foobarの名前に入れて、別のMacシステムで復元できるようにすることです。しかし、私はそれらを望んでいません---彼らは私にとってただのジャンクです。それらを抑制する方法はありますか?

46
vy32

別の質問への回答 ごとに、文書化されていない(?)環境変数COPYFILE_DISABLEを設定して、システム提供のプログラム(tarを含む)のいくつかを防ぐことができます._*アーカイブメンバーに特別な意味を与えることから。特に、次のことを防止します。

  • 拡張属性データ(リソースフォークを含む)を._*アーカイブメンバーに格納する
    (つまり、Mac OS Xで作成されたが他のシステムでの使用を目的としたアーカイブを「汚染」しない)、および

  • ._*のような名前のアーカイブメンバーから拡張属性またはリソースを抽出しようとしています
    (つまり、他のシステムのアーカイブの._*アーカイブメンバーを誤って解釈しないでください)。

環境変数に使用する値は重要ではありません(空の文字列でもかまいません)。 0falseなどの値は、機能を再度有効にしません。重要なのは、変数が設定されているかどうかだけです(機能を再度有効にするには、変数を「設定解除」する必要があります)。

Bourneスタイルのシェル(shkshbashzshなど)コマンドに追加の環境変数をプレフィックスします。

COPYFILE_DISABLE=1 tar cf new.tar …

問題が頻繁に発生する場合は、シェルの初期化ファイルの1つにこの変数を設定してエクスポートすることをお勧めします。

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

必要に応じて、個々のコマンドの変数を設定解除できます。

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

このMac OS X 10.6システムでは、次のコマンドはすべてCOPYFILE_DISABLEについて知っているようです。

  • /usr/bin/tarbsdtarへのシンボリックリンク)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLEは、Mac OS X 10.5で開発されました。 10.4をサポートする必要がある場合は、同じように機能するCOPY_EXTENDED_ATTRIBUTES_DISABLEがあります。

70
Chris Johnsen

専門家ではありませんが、少しグーグルでこれを見つけました: http://www.ofzenandcomputing.com/zanswers/3422

そしてこれ: http://hintsforums.macworld.com/archive/index.php/t-28703.html

2番目のコマンドは、スクリプトに組み込むことができるようです。リソースフォークファイルの作成を防ぐことはできないかもしれませんが、後で自動的に削除することができます。

編集:私はこれが悪い結果をもたらすかもしれないと述べるべきでした、あなた自身の責任で使用してください。

0
CreeDorofl

独自のtarをコンパイルするか、可能であればMacportsまたはFinkからインストールしてみてください(Homebrewにはありません)。 「運」がいくらかあれば、OS Xメタデータを無視し、それらのファイルの作成をスキップする必要があります。

0
Daniel Beck