Neden OS X üzerindeki tarball'ımda ._foo gibi dosyalar alıyorum?


70

OS X'te bazı dosyaları tartığımda:

tar cvf foo.tar foo

._fooTarball'da fazladan bir dosya üretir :

./._foo
foo

Mac olmayan bir işletim sistemine çıkardığımda ortaya çıkıyor. Ancak ._foodosya sistemimde yok! Neler oluyor? Ondan nasıl kurtulabilirim?


Bundan nefret ediyorum. 7-Zip içeren arşivlere göz atarken çirkin görünüyor.
Nathaniel,

Yanıtlar:


79

OS X'in katranı, genişletilmiş öznitelikleri ve ACL'leri depolamak için AppleDouble formatını kullanır.

$ 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'in katranı aynı zamanda ._ üyelerin yerel biçimlere nasıl dönüştürüleceğini de biliyor; Tar COPYFILE_DISABLE değerini bir değere ayarlayarak meta verileri içermemesini söyleyebilirsiniz:

$ COPYFILE_DISABLE=1 tar -cf 2.tar file*    
$ tar -tf 2.tar
file1
file2
file3
  • Copyfile işlevleri man copyfile
  • ls -l@genişletilmiş özniteliklerin anahtarlarını ve boyutlarını gösterir, ls -leACL'leri yazdırır
  • xattr -l Genişletilmiş özelliklerin anahtarlarını ve değerlerini listeler
  • xattr -c tüm genişletilmiş öznitelikleri temizler (-d tek başına kullanılamaz)
  • chmod -N ACL'leri siler
  • OS X'te oluşturulan zip dosyaları, benzer meta verileri depolamak için __MACOSX klasörünü kullanır.

Genişletilmiş özellikler olarak depolanan bilgiler:

  • Kaynak çatalları (kaynak çatalları 10.4'ten beri genişletilmiş öznitelikler)
    • Finder’da ayarlanan özel simgeler ve Icon \ r dosyalarının görüntüleri
    • PSD dosyalarındaki meta veriler
    • Scpt dosyalarında saklanan nesneler, AppleScript Editor pencere durumu, komutların açıklamaları
  • Diğer adlar hakkında bilgi (diğer adlar kaldırılırsa diğer adlar çalışmayı durdurur)
  • İnternetten indirilen dosyaların durumunu veya kaynak URL'lerini karantinaya al
  • Spotlight yorumları
  • TextEdit ile kaydedilen dosyaların kodlanması
  • TextMate ile açılan dosyaların şapka pozisyonu
  • Yağsız notlar

MacOS X 10.5.8 (Leopard) cihazında varsayılan olarak GNU tar 1.15.1 var. GNU’nun son sürümü 1.22’dir (Mart 2009). İndirildi ve oluşturuldu: MacOS X'te oluşturulduğunda '--no-xattrs' görünmüyor.
Jonathan Leffler

1
Bu değişkeni tüm sisteme dışa aktarmak yerine de kullanabilirsiniz env COPYFILE_DISABLE tar -cf archive.tar my_folder/.
Georg Schölly

1
@Cawas, sorun şu ki, daha sonra çapraz platform dağıttığım tarball'da ortaya çıkmışlardı ve Apple dışı bir işletim sisteminde hiçbir anlamı yoktu.
Jesse Beder

1
Bu doğru Jesse, aslında diğer işletim sistemleri / dosya sistemleri için bir anlamı yok . Ama bilgi var ve biz edebilir catya typeda en azından, içeride ne olduğunu görmek için. Ve genellikle oraya elle girilen basit bir metindir. Yedekleme için onu fırlatıp atmam ama platformlar arası bir şey dağıtmak istemeniz durumunda ve özel olarak yanlışlıkla olması durumunda çöp olabilir. Sadece onları bırakma seçeneğinin söylenmesi oldukça geçerli.
cregox

1
Bilginize, Leopard için ihracat hattı da Lion için çalışıyor.
jjeaton

12

İtibariyle bsdtar 3.0.3 - libarchive 3.0.3(ve belki de daha erken) için yeni bir seçenek var bsdtardenilen komuta --disable-copyfileoluşturulmasını bastırmak için ._dosyaları.

# 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
İle bsdtar 2.8.3 - libarchive 2.8.3arasında yine belgelenmiş ancak mevcut değildir. 10.7.5--disable-copyfile
Stefan Schmidt,


1

._Diğer yanıtlar belirtildiği gibi dosyalar kaynak çatal vardır. Ancak, bunları kullanırken onlardan kurtulmanın daha iyi bir yolu var tar:

export COPYFILE_DISABLE=true
tar cvf foo.tar foo

dot_cleanBu dosyaları temizlemek için de bir yardımcı program var (bence genellikle harici depolama için kullanılıyor).


Teşekkürler! Bu çözüm için yukarıdaki cevabımın sonuna bakınız.
Jesse Beder

dot_clean bunun için çalışmıyor çünkü tar dosyalar oluşturuyor
joedevon

0

İşte bu dosyaları kaldırmak için bir python betiği. Herhangi bir popüler işletim sisteminde çalışmalı.

Değil iyice test, kendi sorumluluğunuzdadır kullanın!

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
Eh, HFS + ile OS X hariç ...
Daniel Beck

Neden olmasın? Düzeltmeyi önerebilir misin?
Aivar

1
Bu dosyalar aslında HFS + üzerinde mevcut değildir, çünkü dosya sistemi meta verileri dahili olarak depolayabilir. Bu dosyalar, örneğin HFS + 'dan bir FAT USB flaş sürücüye dosya aktarırken, bunlar ortaya çıktıklarında ve onları geri aktarırken yok olduklarında, desteklemeyen dosya sistemleri için geçici bir çözümdür.
Daniel Beck

-3

Dönem karakteri, ".", Mac platformunda gizli bir dosya göstergesi olarak kullanılır. Windows'ta "$" karakteridir. Her neyse, ._foo dosyası büyük olasılıkla bazı OS X belirli bilgileri tutar ve silmeyi tavsiye ederim. Diğer sistemlerde bunu görmezden gelmeniz gerekebilir veya burada birileri size "." İle başlayan dosya ve klasörleri gizleyecek bir komut dosyası sağlayabilir.


Hepsi metadata, çoğunlukla özel simgeler, dosyayı oluşturan uygulama vb. Şeylerdir. Silmek güvenlidir.
dreamlax

Yine de, öncelikle Mac kullanıyorsanız, saklamanızı tavsiye ederim. Windows'u OS X'ten daha fazla kullanıyorsanız, devam edip öldürün.
dbmikus

(@dreamlax) Genişletilmiş özelliklerde depolanan verilerin çoğunun silinmesinin güvenli olabileceği meta verileri olduğu doğrudur, ancak bu her zaman böyle değildir. Özellikle, “kaynak çatalları” olan dosyalar HFS türevi olmayan bir şeyde depolandığında (FAT, UFS, tar, vb.) Bu '._ *' dosyaları verileri (diğer genişletilmiş özniteliklerin yanı sıra) tutmak için kullanılır. kaynak çatalları. Birçok dosya formatı kaynak çatallarını kullanmaktan uzaklaşırken (paketlere doğru), kritik verilerin kaynak çatalında depolandığı bazı dosyalar vardır (bazen kaynak verileri tek veridir).
Chris Johnsen
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.