OS Xのtarballで._fooのようなファイルを取得するのはなぜですか?


70

OS Xで特定のファイルをtarするとき:

tar cvf foo.tar foo

._footarballに追加のファイルを作成します。

./._foo
foo

Mac以外のオペレーティングシステムで展開した場合にのみ表示されます。しかし._foo、私のファイルシステムには存在しません!どうしたの?どうすればそれを取り除くことができますか?


嫌い。7-Zipでアーカイブ内を閲覧していると、見苦しくなります。
ナサニエル

回答:


79

OS Xのtarは、AppleDouble形式を使用して拡張属性とACLを保存します。

$ touch file1 file2 file3
$ xattr -w key value file1
$ chmod +a 'admin allow delete' file2
$ ls -le@ *
-rw-r--r--@ 1 lauri  staff  0 May 25 07:09 file1
    key 5
-rw-r--r--+ 1 lauri  staff  0 May 25 07:09 file2
 0: group:admin allow delete
-rw-r--r--  1 lauri  staff  0 May 25 07:09 file3
$ tar -cf 1.tar *
$ tar -tf 1.tar
./._file1
file1
./._file2
file2
file3

OS Xのtarは、._メンバーを元の形式に変換する方法も知っていますが、._ファイルは通常、他のプラットフォームでアーカイブを抽出するときに保持されます。COPYFILE_DISABLEを何らかの値に設定することで、tarにメタデータを含めないように指示できます。

$ COPYFILE_DISABLE=1 tar -cf 2.tar file*    
$ tar -tf 2.tar
file1
file2
file3
  • copyfile関数については、 man copyfile
  • ls -l@拡張属性のキーとサイズを表示し、ls -leACLを出力します
  • xattr -l 拡張属性のキーと値をリストします
  • xattr -c すべての拡張属性をクリアします(-dは単独では使用できません)
  • chmod -N ACLを削除します
  • OS Xで作成されたZipファイルは、__ MACOSXフォルダーを使用して同様のメタデータを保存します

拡張属性として保存される情報:

  • リソースフォーク(10.4以降、リソースフォークは拡張属性になっています)
    • Finderで設定されたカスタムアイコンとIcon \ rファイルの画像
    • PSDファイルのメタデータ
    • scptファイルに保存されているオブジェクト、AppleScript Editorウィンドウの状態、スクリプトの説明
  • エイリアスに関する情報(拡張属性が削除されるとエイリアスは機能しなくなります)
  • インターネットからダウンロードしたファイルの検疫ステータスまたはソースURL
  • スポットライトコメント
  • TextEditで保存されたファイルのエンコード
  • TextMateで開かれたファイルのキャレット位置
  • スキムノート

MacOS X 10.5.8(Leopard)にはデフォルトでGNU tar 1.15.1があります。GNUの最新バージョンは1.22(2009年3月)です。ダウンロードして構築された:のMacOS X上で構築されたときに「--no-xattrs」を持っているように見えていません
ジョナサン・レフラー

1
この変数をシステム全体にエクスポートする代わりに、を使用することもできますenv COPYFILE_DISABLE tar -cf archive.tar my_folder/
ゲオルクシェーリー

1
@Cawas、問題は、それらがtarballに現れて、それがクロスプラットフォームを配布していたことで、Apple以外のオペレーティングシステムでは意味がありませんでした。
ジェシーベダー

1
それは本当のジェシーです、彼らは他のOS /ファイルシステムにとっては本当に意味がありません。しかし、情報はそこにあり、少なくとも何が入っているcattypeを見ることができます。そして、通常、そこに手動で入力された単純なテキストです。バックアップのために捨てるつもりはありませんが、クロスプラットフォームで何かを配布したい場合や、特に誤ってそこにある場合は、ゴミになる可能性があります。それらを残すオプションは非常に有効です。
クレゴックス

1
参考までに、Leopardの輸出ラインはLionでも機能します。
ジートン

12

とおりbsdtar 3.0.3 - libarchive 3.0.3(そしておそらくそれ以前)に新しいオプションがありますbsdtarと呼ばれるコマンド--disable-copyfileの作成抑制するために._ファイルを。

# on Mac OS X
# /usr/bin/tar -> bsdtar
ls -l /usr/bin/tar    

# from man bsdtar
--disable-copyfile
        Mac OS X specific.  Disable the use of copyfile(3).

3
それにもかかわらず、文書化が、利用可能なされていません。bsdtar 2.8.3 - libarchive 2.8.310.7.5--disable-copyfile
ステファンシュミット


1

._他の回答で述べたように、ファイルはリソースフォークです。ただし、使用する場合はそれらを取り除くより良い方法がありますtar

export COPYFILE_DISABLE=true
tar cvf foo.tar foo

dot_cleanこれらのファイルをクリーンアップするユーティリティもあります(通常、外部ストレージに使用されると思います)。


ありがとう!その解決策については、上記の回答の最後をご覧ください。
ジェシーベダー

dot_cleanは、tarファイルを作成しているので、このために動作しません
joedevon

0

これらのファイルを削除するためのPythonスクリプトを次に示します。一般的なOSで動作するはずです。

完全にテストされていないため、自己責任で使用してください!

import os
import os.path

def dot_clean(folder):
    files = os.listdir(folder)
    for file in files:
        full_name = folder + "/" + file
        if os.path.isdir(full_name):
            dot_clean(full_name)
        elif file.startswith("._"):
            os.remove(full_name)

dot_clean('.')            

1
さて、HFS +を搭載したOS Xを除き...
ダニエルベック

何故なの?修正方法を提案できますか?
アイバー

1
これらのファイルは、ファイルシステムがメタデータを内部に保存できるため、実際にはHFS +には存在しません。これらのファイルは、たとえば、HFS +からFAT USBサムドライブにファイルを転送するとき、それらが存在するようにポップし、それらを元に戻すときに消失することをサポートしないファイルシステムの回避策です。
ダニエルベック

-3

ピリオド文字「。」は、Macプラットフォームでは隠しファイルインジケータとして使用されます。Windowsでは、「$」文字です。とにかく、._ fooファイルはおそらくOS X固有の情報を保持しているので、削除しないことをお勧めします。他のシステムでは、それを無視する必要があります。そうしないと、誰かが「。」で始まるファイルとフォルダーを隠すスクリプトを提供できる可能性があります。


それはすべてメタデータであり、ほとんどがカスタムアイコン、ファイルを作成したアプリケーションなどです。削除しても安全です。
dreamlax

それでも、主にMacを使用する場合は、Macを保管することをお勧めします。OS XよりもWindowsを使用している場合は、先に進んで強制終了してください。
dbmikus

(@dreamlax)拡張属性に保存されているデータの多くはメタデータであり、削除しても安全である可能性がありますが、常にそうであるとは限りません。特に、「リソースフォーク」を持つファイルがHFSから派生していないもの(FAT、UFS、tarなど)に保存されている場合、これらの「._ *」ファイルは(他の拡張属性の中で)データを保持するために使用されますリソースフォーク。多くのファイル形式はリソースフォークの使用から離れていますが(バンドルに向けて)、重要なデータがリソースフォークに格納されるファイルがあります(リソースデータのみがデータである場合もあります)。
クリスジョンセン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.