私は自分のtarアーカイバを書いています。アプリ内ではすべて正常に動作しますが(他のツールで生成されたtarを読み取る場合でも)、tarファイルをサードパーティのtarファイルリーダーで動作させることができません。そこで、コマンドラインでtarファイルを作成し、コードを使用して1つを作成し、2つをバイナリで比較してみました。
しかし、問題があるようです:
Tarに追加したいTest.txtというテキストファイルがあるので、ターミナルで次のコマンドを実行します。
tar -c -f x.tar Test.txt
これを行うとき:
tar -tf x.tar
次のリストが表示されます。
./._Test.txt
Test.txt
これはMacOS XLionのターミナルにあります。
それはどこにありますか./._Test.txt
ファイルはどこから来たの? ls-aを実行しても表示されません
Tarの内容を調べると、バイナリデータのようですが、どこから来たのかわかりません。
これは、ファイルのリソースフォーク/拡張属性を表したものです。
ls -l@ Test.txt
とxattr -l Test.txt
を試して、OSXがファイルに追加したものを確認してください。
以下をbashrcファイルに追加できます-
export COPYFILE_DISABLE=true
または、抽出時にこのオプションをtar
コマンドに追加できます
tar -xzpvf x.tar --exclude="._*"
Bsdtar 3.0.3 - libarchive 3.0.3
(およびおそらくそれ以前)の時点で、--disable-copyfile
ファイルの作成を抑制するための._
という新しい(Mac OS X固有の)オプションがbsdtar
コマンドにあります。
これは、ターゲットファイルシステムがファイルシステムフォークをサポートしていない場合に、OSXがファイルシステムフォークを保存する方法です。