Lassen Sie mac tar nicht mehr ._ * Dateinamen in tar-Archiven ablegen [duplizieren]

46

Mögliches Duplizieren:
Warum bekomme ich unter OS X Dateien wie ._foo in meinem Tarball?

Ich erstelle Autoconf-Skripte auf einem Mac. Wenn tar ausgeführt wird, werden alle diese ._ foobar- Namen im Archiv abgelegt :

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

Nun , was los ist , das Apples HFS - Dateisystem ist die Dateieigenschaften in den ._ setzen foobar Namen , damit sie auf einem anderen Mac - System wiederhergestellt werden kann. Aber ich will sie nicht - sie sind nur Müll für mich. Gibt es eine Möglichkeit, sie zu unterdrücken?

vy32
quelle
Duplikat von unix.stackexchange.com/questions/9665/… .
Geekosaurier
2
@geekosaur Der Benutzer auf unix.SE gab auf und akzeptierte eine falsche Antwort.
Daniel Beck
Es gibt auch eine verwandte Frage SU-Frage zum richtigen Extrahieren von ._*Dateien aus Archiven (z. B. .__init__.py) , die dieselbe Lösung verwendet.
Chris Johnsen

Antworten:

69

Pro eine Antwort auf eine andere Frage , können Sie die nicht dokumentiert (?) Umgebungsvariable COPYFILE_DISABLE gesetzt mehrere der vom System bereitgestellten Programme (einschließlich verhindern Teer ) von unter besonderer Bedeutung ._*Archiv - Mitglieder. Insbesondere werden sie daran gehindert:

  • Speichern erweiterter Attributdaten (einschließlich Ressourcengabeln) in ._*Archivmitgliedern
    (dh Archive, die unter Mac OS X erstellt wurden, aber für die Verwendung auf anderen Systemen vorgesehen sind, nicht "verschmutzen") und

  • Versuch, erweiterte Attribute oder Ressourcen aus Archivmitgliedern mit dem Namen like zu extrahieren ._*
    (dh ._*Archivmitglieder in Archiven anderer Systeme nicht falsch zu interpretieren ).

Der Wert, den Sie für die Umgebungsvariable verwenden, ist nicht wichtig (es kann sogar die leere Zeichenfolge sein). Werte wie 0und falsewerden die Funktion nicht wieder aktivieren. Das Einzige, was zählt, ist, ob die Variable gesetzt ist (Sie müssen sie "deaktivieren", um das Feature wieder zu aktivieren).

Sie können diese Variable für einzelne Befehle verwenden, indem Sie die Fähigkeit von Shells im Bourne-Stil ( sh , ksh , bash , zsh usw.) nutzen, Befehle mit zusätzlichen Umgebungsvariablen zu versehen.

COPYFILE_DISABLE=1 tar cf new.tar …

Wenn das Problem häufiger auftritt, möchten Sie möglicherweise diese Variable in eine der Initialisierungsdateien Ihrer Shell setzen und exportieren.

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Bei Bedarf können Sie die Variable für einzelne Befehle deaktivieren.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

Auf diesem Mac OS X 10.6-System scheinen die folgenden Befehle alles über COPYFILE_DISABLE zu wissen:

  • /usr/bin/tar(ein symbolischer Link zu bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE stammt aus Mac OS X 10.5. Wenn Sie 10.4 unterstützen müssen, verfügt es über COPY_EXTENDED_ATTRIBUTES_DISABLE, das auf die gleiche Weise funktioniert.

Chris Johnsen
quelle
BEEINDRUCKEND. Genau das, wonach ich gesucht habe. Vielen Dank. Meine Autoconf-Dateien werden viel, viel sauberer.
vy32
0

Kein Experte, aber ein bisschen googeln fand dies: http://www.ofzenandcomputing.com/zanswers/3422

und dies: http://hintsforums.macworld.com/archive/index.php/t-28703.html

Der zweite Befehl sieht so aus, als könnte er in ein Skript integriert werden. Möglicherweise können Sie die Erstellung von Resource Fork-Dateien nicht verhindern, aber Sie können sie anschließend automatisch löschen.

edit: Ich hätte erwähnen sollen, dass dies zu schlechten Ergebnissen führen kann. Die Verwendung erfolgt auf eigenes Risiko.

CreeDorofl
quelle
1
Das Skript entfernt Ressourcengabeln aus Dateien auf der lokalen Festplatte. Sie dienen in der Regel einem Zweck (z. B. dem Ändern der zugeordneten Anwendung einer bestimmten Datei), weshalb eine große Warnung angezeigt werden sollte.
Daniel Beck
Das Skript hilft mir nicht. Es entfernt die Dateien von der Festplatte, nicht aus dem tar-Archiv. Es stellte sich heraus, dass ich die Ressourcendateien nicht auf meiner Festplatte habe. Aber sie werden ins Archiv gestellt. Und im Gegensatz zu zip-Dateien können Sie Dateien nicht einfach aus einem tar-Archiv entfernen.
Vy32
(bah, timeouts) Eigentlich können Sie, wenn Sie so ziemlich alles taraußer dem BSD- libarchivebasierten verwenden (dies schließt Mac OS X ein), aber möglicherweise nicht zuverlässig sein; GNU tar zu installieren ist oft eine gute Idee. (Es ist jedoch schmerzhaft. Ich denke, Sie müssen alle auflisten und diese Namen dann in der Befehlszeile übergeben.) Außerdem befinden sich die Ressourcengabeln technisch auf der Festplatte, aber in HFS + werden sie in erweiterten Attributen gespeichert. Die ._Dateien dienen OS X zum Speichern von Resource Forks an Orten, die keine erweiterten Attribute unterstützen.
Geekosaurier
0

Sie können versuchen, Ihr eigenes zu kompilieren taroder es von Macports oder Fink aus zu installieren, falls verfügbar (Homebrew hat es nicht). Mit etwas Glück sollte es keine Ahnung von OS X-Metadaten haben und das Erstellen dieser Dateien überspringen.

Daniel Beck
quelle
Ich würde mich über eine Erklärung für die Ablehnung freuen. Danke.
Daniel Beck