Ich möchte ein tar-Archiv eines bestimmten Verzeichnisses erstellen (mit seinen Unterverzeichnissen natürlich). Aber wenn ich es mit dem Befehl tar mache, erhalte ich eine Liste der enthaltenen Dateien, zum Beispiel:
ein calendar_final /._ style.css
ein calendar_final / style.css
Wie Sie sehen, gibt es zwei Versionen derselben Datei. Dies gilt für jede Datei, und es gibt viele. Wie schließe ich die temporären Dateien mit dem Präfix ._ aus dem tar-Archiv aus?
Antworten:
Sie haben in einem Kommentar geschrieben, dass Sie auf einem Mac OS X-System arbeiten. Dies ist ein wichtiger Hinweis auf den Zweck dieser
._*
Dateien.Diese
._*
Archiveinträge sind Teile von AppleDouble- Daten, die die zusätzlichen Informationen enthalten, die der entsprechenden Datei (der Datei ohne._
Präfix) zugeordnet sind. Sie werden von der Mac OS X-spezifischen Funktionsfamilie copyfile (3) generiert . Die AppleDouble-Blobs speichern Zugriffssteuerungsdaten (Access Control Data, ACLs) und erweiterte Attribute ( normalerweise Finder- Flags und "Resource Forks"). Xattrs können jedoch zum Speichern beliebiger Datentypen verwendet werden.Das System gelieferte Mac OS X - Archiv Tools (
bsdtar
(auch symbolische Links alstar
),gnutar
undpax
) wird ein generieren._*
Archiv Mitglied für jede Datei , die alle erweiterten Information zugeordnet ist; Im Modus "Nicht archivieren" dekodieren sie auch diese Archivmitglieder und wenden die resultierenden erweiterten Informationen auf die zugehörige Datei an. Auf diese Weise wird ein Archiv mit vollständiger Wiedergabetreue für die Verwendung auf Mac OS X-Systemen erstellt, indem alle Informationen, die das HFS + -Dateisystem speichern kann, beibehalten und später extrahiert werden.Die entsprechenden Archivierungstools auf anderen Systemen können diese
._*
Dateien nicht speziell behandeln und werden daher als normale Dateien entpackt. Da solche Dateien auf anderen Systemen ziemlich nutzlos sind, werden sie oft als "Junk-Dateien" angesehen. Wenn ein Nicht-Mac OS X-System ein Archiv generiert, das normale Dateien enthält, die mit beginnen._
, versuchen die Mac OS X-Tools zum Aufheben der Archivierung, diese Dateien als erweiterte Informationen zu dekodieren.Es gibt jedoch eine undokumentierte (?) Methode, mit der sich die vom System bereitgestellten Mac OS X-Archivierungsprogramme wie auf anderen Unixy-Systemen verhalten: die Umgebungsvariable COPYFILE_DISABLE. Durch Festlegen dieser Variablen (auf einen beliebigen Wert, auch auf eine leere Zeichenfolge) wird verhindert, dass die Archivierer
._*
Archivmitglieder generieren , um erweiterte Informationen darzustellen, die den archivierten Dateien zugeordnet sind. Seine Anwesenheit wird auch die Archivierer daran hindern, solche Archivmitglieder als erweiterte Informationen zu interpretieren.Sie können diese Variable in der Initialisierungsdatei Ihrer Shell festlegen, wenn Sie häufiger auf diese Weise arbeiten möchten.
Wenn Sie die Funktion dann erneut aktivieren müssen (um die erweiterten Informationen beizubehalten / wiederherzustellen), können Sie die Variable für einzelne Befehle "deaktivieren":
Die Archivierer unter Mac OS X 10.4 führen ähnliche Aktionen aus, verwenden jedoch eine andere Umgebungsvariable: COPY_EXTENDED_ATTRIBUTES_DISABLE
quelle
Das sollte funktionieren:
quelle
tar --version
gibt GNU 1.23 hier.tar vzcf ...
zu sehen, ob falsche Dateien enthalten waren.Frederik Deweerdt hat eine Lösung vorgestellt, die auf GNU tar (möglicherweise unter Linux, Cygwin, FreeBSD, OSX usw.) funktioniert, jedoch nicht auf anderen Systemen wie NetBSD, OpenBSD oder Solaris.
POSIX gibt den
tar
Befehl nicht an (da er zwischen den Unix-Varianten zu stark variiert) und führtpax
stattdessen den Befehl ein. Die Option-w
bedeutet, ein Archiv (-r
Auszüge) zu erstellen und-x
das Archivformat auszuwählen. Die Option-s '!BRE!!'
schließt alle Dateien aus, deren Pfad dem regulären Basisausdruck BRE entspricht.quelle
Ab
bsdtar 3.0.3 - libarchive 3.0.3
(und vielleicht schon früher) enthält derbsdtar
Befehl eine neue (Mac OS X-spezifische) Option--disable-copyfile
, um die Erstellung von._
Dateien zu unterdrücken . Ältere Versionen vontar
haben keine--disable-copyfile
Option, aber das Setzen der UmgebungsvariablenCOPYFILE_DISABLE=1
sollte funktionieren.quelle
bsdtar 2.8.3 - libarchive 2.8.3
der10.7.5
die--disable-copyfile
nicht dokumentiert ist , dennoch aber zur Verfügung.Folge diesen Schritten:
Finden Sie alle
._
Dateien und listen Sie sie mit auf,-ls
damit Sie alle._
Dateien sehen und schließlich löschen können.Erstellen Sie das Archiv .tar mit.
quelle