回答:
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
man copyfile
ls -l@
拡張属性のキーとサイズを表示し、ls -le
ACLを出力しますxattr -l
拡張属性のキーと値をリストしますxattr -c
すべての拡張属性をクリアします(-dは単独では使用できません)chmod -N
ACLを削除します拡張属性として保存される情報:
env COPYFILE_DISABLE tar -cf archive.tar my_folder/
。
cat
かtype
を見ることができます。そして、通常、そこに手動で入力された単純なテキストです。バックアップのために捨てるつもりはありませんが、クロスプラットフォームで何かを配布したい場合や、特に誤ってそこにある場合は、ゴミになる可能性があります。それらを残すオプションは非常に有効です。
とおり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).
bsdtar 2.8.3 - libarchive 2.8.3
10.7.5
--disable-copyfile
これらのファイルを削除するための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('.')
ピリオド文字「。」は、Macプラットフォームでは隠しファイルインジケータとして使用されます。Windowsでは、「$」文字です。とにかく、._ fooファイルはおそらくOS X固有の情報を保持しているので、削除しないことをお勧めします。他のシステムでは、それを無視する必要があります。そうしないと、誰かが「。」で始まるファイルとフォルダーを隠すスクリプトを提供できる可能性があります。