Warum bekomme ich in meinem Tarball unter OS X Dateien wie ._foo?

24174
Jesse Beder

Wenn ich bestimmte Dateien in OS X tariere:

tar cvf foo.tar foo 

Im ._fooTarball wird eine zusätzliche Datei erstellt :

./._foo foo 

was nur angezeigt wird, wenn ich es auf einem Nicht-Mac-Betriebssystem extrahiere. Ist ._fooaber nicht in meinem Dateisystem vorhanden! Was ist los? Wie kann ich es loswerden?

61
Hasse das. Sieht hässlich aus, wenn ich mit 7-Zip in Archiven browse. Nathaniel vor 14 Jahren 0

5 Antworten auf die Frage

73
Jesse Beder

OS Xs tar verwendet das AppleDouble-Format, um erweiterte Attribute und ACLs zu speichern.

$ 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 Xs tar kann auch die ._-Member zurück in native Formate konvertieren, die ._-Dateien werden jedoch normalerweise beibehalten, wenn Archive auf anderen Plattformen extrahiert werden. Sie können tar anweisen, die Metadaten nicht einzuschließen, indem Sie COPYFILE_DISABLE auf einen Wert setzen:

$ COPYFILE_DISABLE=1 tar -cf 2.tar file*  $ tar -tf 2.tar file1 file2 file3 
  • Die Copyfile-Funktionen sind in beschrieben man copyfile
  • ls -l@Zeigt die Schlüssel und Größen der erweiterten Attribute an, ls -ledruckt ACLs
  • xattr -l listet die Schlüssel und Werte der erweiterten Attribute auf
  • xattr -c löscht alle erweiterten Attribute (-d kann nicht alleine verwendet werden)
  • chmod -N löscht ACLs
  • Unter OS X erstellte Zip-Dateien verwenden einen __MACOSX-Ordner, um ähnliche Metadaten zu speichern

Als erweiterte Attribute gespeicherte Informationen:

  • Ressourcengabeln (Ressourcengabeln wurden seit 10.4 um erweiterte Attribute erweitert)
    • Benutzerdefinierte Symbole im Finder und die Bilder der Symbol-Dateien
    • Metadaten in PSD-Dateien
    • In scpt-Dateien gespeicherte Objekte, Status des AppleScript-Editor-Fensters, Beschreibungen der Skripts
  • Informationen zu Aliases (Aliase funktionieren nicht mehr, wenn erweiterte Attribute entfernt werden)
  • Quarantänestatus oder Quell-URLs von Dateien, die aus dem Internet heruntergeladen wurden
  • Spotlight-Kommentare
  • Kodierung der mit TextEdit gespeicherten Dateien
  • Caret-Position von Dateien, die mit TextMate geöffnet wurden
  • Überflüssige Notizen
Ich habe GNU tar 1.15.1 standardmäßig unter MacOS X 10.5.8 (Leopard). Die neueste Version von GNU ist 1.22 (März 2009). Heruntergeladen und erstellt: Bei MacOS X scheint "--no-xattrs" nicht vorhanden zu sein. Jonathan Leffler vor 14 Jahren 0
Anstatt diese Variable in das gesamte System zu exportieren, können Sie auch 'env COPYFILE_DISABLE tar -cf archive.tar my_folder / `verwenden. Georg Schölly vor 13 Jahren 1
Eine andere Möglichkeit ist, sie sein zu lassen. Es ist eine kleine Druckgröße und Informationen, die Sie wegwerfen. Es ärgert auch nur, wer sie sehen will und nicht lernen will, was sie bedeuten. Das sind keine verrückten Thumbnails (die viel Platz beanspruchen) oder [Finder's DS Crap] (http://en.wikipedia.org/wiki/.DS_Store) (das ist nur gut für den Finder) und ob sie existieren, liegt normalerweise daran, dass sie existieren relevante Daten haben. cregox vor 13 Jahren 0
@ Kawas, das Problem war, dass sie im Tarball aufgetaucht waren, das ich dann plattformübergreifend verteilte, und sie haben auf einem Nicht-Apple-Betriebssystem keine Bedeutung. Jesse Beder vor 13 Jahren 1
Das stimmt, Jesse, sie haben tatsächlich * keine Bedeutung für andere Betriebssysteme / Dateisysteme *. Aber die * info ist da * und wir können "cat" oder "type" eingeben, um zu sehen, was drin ist. Es ist normalerweise etwas einfacher Text, der dort manuell eingegeben wurde. Ich würde es nicht für die Sicherung wegwerfen, aber es kann Müll sein, falls Sie etwas plattformübergreifend verteilen möchten und vor allem, wenn es versehentlich da ist. Nur zu sagen, die Option, sie zu verlassen, ist ziemlich gültig. cregox vor 13 Jahren 1
Zu Ihrer Information, die Exportlinie für Leopard funktioniert auch für Lion. jjeaton vor 11 Jahren 1
11
mdm

Ab bsdtar 3.0.3 - libarchive 3.0.3(und möglicherweise früher) gibt es eine neue Option für den bsdtarBefehl --disable-copyfile, die das Erstellen von ._Dateien unterdrückt .

# 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). 
Mit `bsdtar 2.8.3 - libarchive 2.8.3` von` 10.7.5` ist die `--disable-copyfile` nicht dokumentiert, aber trotzdem verfügbar. Stefan Schmidt vor 10 Jahren 3
https://github.com/libarchive/libarchive/commit/7cf625f3e1ff2f376d265465f8f97dd5b8953ef2#commitcomment-9636090 und http://forums.macrumors.com/showthread.php?p=20684196#post20684196#post20684106 Graham Perrin vor 9 Jahren 0
1
jtbandes

Die ._Dateien sind Ressourcengabeln, wie in anderen Antworten erwähnt. Es gibt jedoch einen besseren Weg, um sie loszuwerden, wenn Sie Folgendes verwenden tar:

export COPYFILE_DISABLE=true tar cvf foo.tar foo 

Es gibt auch ein dot_cleanDienstprogramm zum Bereinigen dieser Dateien (ich denke, es wird normalerweise für externe Speicherung verwendet).

Vielen Dank! Siehe das Ende meiner obigen Antwort für diese Lösung. Jesse Beder vor 14 Jahren 0
dot_clean funktioniert nicht, da tar die Dateien erstellt joedevon vor 13 Jahren 0
0
Aivar

Hier ist ein Python-Skript zum Entfernen dieser Dateien. Sollte in jedem gängigen Betriebssystem funktionieren.

Nicht gründlich getestet, Verwendung auf eigene Gefahr!

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('.')  
Nun, außer für OS X mit HFS + ... Daniel Beck vor 12 Jahren 1
Warum nicht? Können Sie vorschlagen, wie Sie das Problem beheben können? Aivar vor 12 Jahren 0
Diese Dateien sind auf HFS + nicht vorhanden, da das Dateisystem die Metadaten intern speichern kann. Diese Dateien sind eine Problemumgehung für Dateisysteme, die dies nicht unterstützen. Wenn Sie beispielsweise Dateien von HFS + auf ein USB-FAT-USB-Laufwerk übertragen, werden sie angezeigt und verschwinden, wenn Sie sie wieder übertragen. Daniel Beck vor 12 Jahren 1
-3
dbmikus

Das Punktzeichen "." Wird auf der Mac-Plattform als Indikator für ausgeblendete Dateien verwendet. Unter Windows ist es das Zeichen "$". Wie auch immer, die ._foo-Datei enthält wahrscheinlich einige OS X-spezifische Informationen, und ich würde empfehlen, sie nicht zu löschen. Auf anderen Systemen müssen Sie dies ignorieren, oder jemand hier kann Ihnen möglicherweise ein Skript zur Verfügung stellen, mit dem Dateien und Ordner, die mit einem "." Beginnen, ausgeblendet werden.

Es sind alle Metadaten, meistens Dinge wie benutzerdefinierte Symbole, die Anwendung, mit der die Datei erstellt wurde usw. Das Löschen ist sicher. dreamlax vor 14 Jahren 0
Wenn Sie jedoch hauptsächlich Mac verwenden, würde ich empfehlen, den Mac zu behalten. Wenn Sie Windows mehr als OS X verwenden, fahren Sie fort und beenden Sie es. dbmikus vor 14 Jahren 0
(@dreamlax) Es stimmt, dass ein Großteil der in den erweiterten Attributen gespeicherten Daten Metadaten sind, die möglicherweise gelöscht werden könnten. Dies ist jedoch nicht immer der Fall. Wenn Dateien mit "Ressource-Gabeln" auf etwas gespeichert werden, das nicht von HFS abgeleitet ist (FAT, UFS, tar usw.), werden diese "._ *" -Dateien verwendet, um die Daten (unter anderen erweiterten Attributen) von der Datenbank zu speichern Ressourcengabeln. Während viele Dateiformate sich von der Verwendung von Ressourcengabeln (hin zu Bundles) entfernen, gibt es einige Dateien, in denen kritische Daten im Ressourcenzweig gespeichert werden (manchmal sind die Ressourcendaten die einzigen Daten). Chris Johnsen vor 14 Jahren 0