GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Tar-Archiv eines Verzeichnisses erstellen, außer für versteckte Dateien?

Ich möchte ein tar-Archiv eines bestimmten Verzeichnisses erstellen (natürlich mit seinen Unterverzeichnissen). Aber wenn ich es mit dem tar-Befehl mache, bekomme ich eine Liste der enthaltenen Dateien, zum Beispiel:

a Calendar_final/._style.css

a Calendar_final/style.css

Wie Sie sehen können, 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?

Akzeptierte Antwort:

Sie haben in einem Kommentar gepostet, 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 mit der entsprechenden Datei verknüpft sind (diejenige ohne den ._ Präfix). Sie werden von der Mac OS X-spezifischen copyfile(3) generiert Familie von Funktionen. Die AppleDouble-Blobs speichern Zugriffssteuerungsdaten (ACLs) und erweiterte Attribute (üblicherweise Finder Flags und „Resource Forks“, aber xattrs können verwendet werden, um jede Art von Daten zu speichern).

Die vom System bereitgestellten Mac OS X-Archivierungstools (bsdtar (auch als tar symbolisiert ), gnutar , und pax ) generiert ein ._* Archivelement für jede Datei, der irgendwelche erweiterten Informationen zugeordnet sind; Im „Unarchive“-Modus dekodieren sie auch diese Archivmitglieder und wenden die resultierenden erweiterten Informationen auf die zugehörige Datei an. Dadurch wird ein „Full Fidelity“-Archiv zur Verwendung auf Mac OS X-Systemen erstellt, indem alle Informationen, die das HFS+-Dateisystem speichern kann, erhalten und später extrahiert werden.

Die entsprechenden Archivierungstools auf anderen Systemen kennen diese ._* nicht besonders Dateien, also werden sie wie normale Dateien entpackt. Da solche Dateien auf anderen Systemen ziemlich nutzlos sind, werden sie oft als „Junk-Dateien“ angesehen. Entsprechend, wenn ein Nicht-Mac OS X-System ein Archiv generiert, das normale Dateien enthält, die mit ._ beginnen , versuchen die Dearchivierungstools von Mac OS X, diese Dateien als erweiterte Informationen zu entschlüsseln.

Es gibt jedoch eine undokumentierte (?) Möglichkeit, die vom System bereitgestellten Mac OS X-Archivierer dazu zu bringen, sich so zu verhalten, wie sie es auf anderen Unixy-Systemen tun:die Umgebungsvariable COPYFILE_DISABLE. Das Setzen dieser Variable (auf einen beliebigen Wert, sogar die leere Zeichenfolge) verhindert, dass die Archivierer ._* generieren Archivmitglieder, um alle erweiterten Informationen darzustellen, die den archivierten Dateien zugeordnet sind. Seine Anwesenheit wird auch verhindern, dass die Archivierer versuchen, solche Archivmitglieder als erweiterte Informationen zu interpretieren.

COPYFILE_DISABLE=1 tar czf new.tar.gz …
COPYFILE_DISABLE=1 tar xzf unixy.tar.gz …

Sie können diese Variable in der Initialisierungsdatei Ihrer Shell setzen, wenn Sie häufiger auf diese Weise arbeiten möchten.

# disable special creation/extraction of ._* files by tar, etc. on Mac OS X
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Wenn Sie die Funktion dann erneut aktivieren müssen (um die erweiterten Informationen beizubehalten/wiederherstellen), können Sie die Variable für einzelne Befehle „unset“:

(unset COPYFILE_DISABLE; tar czf new-osx.tar.gz …)

Die Archivierer unter Mac OS X 10.4 tun ebenfalls etwas Ähnliches, obwohl sie eine andere Umgebungsvariable verwenden:COPY_EXTENDED_ATTRIBUTES_DISABLE

Verwandte:STDERR und STDOUT auf verschiedene Variablen ohne temporäre Dateien umleiten?
Linux
  1. Zielverzeichnis beim Extrahieren von Tarball erstellen?

  2. Wie erstellt man ein tar-Archiv, das in mehrere Dateien aufgeteilt ist oder sich über mehrere Dateien erstreckt?

  3. Extrahieren Sie bestimmte Dateien in einem tar-Archiv mit einem Platzhalter

  4. Verketten Sie mehrere Tar-Dateien in einem Befehl

  5. Datei zu tbz-Dateien hinzufügen

Tar-Befehl unter Linux (Archive erstellen und extrahieren)

So archivieren Sie Dateien und Verzeichnisse unter Linux [Teil 1]

Erstellen Sie ein Home-Verzeichnis für einen bestehenden Benutzer in Linux

Linux-tar-Befehl – ​​So komprimieren Sie Dateien unter Linux

So tarieren Sie bestimmte Dateitypen (Erweiterungen) in einem Verzeichnis

Wie kann ich Dateien mit regulären Ausdrücken aus dem TAR-Archiv ausschließen?