Archiv mit versteckten Dateien und Ordnern erstellen erstellt einen .root-Eintrag

Archiv mit versteckten Dateien und Ordnern erstellen erstellt einen .root-Eintrag

Ich versuche, einen Projektordner mit versteckten Dateien und Ordnern zu archivieren und bekomme einen mit einem Stammeintrag von .. Das ist ärgerlich. Normalerweise:

tar -czf $ARCHIVE_NAME -C $DIR .

erstellt ein Archiv wie

./package.json
./.git
./.gitignore
.
.
.

wobei ich möchte, dass die Wurzel des Archivs die eigentlichen Dateien und Ordner sind und kein .Eintrag vorhanden ist. Wie

package.json
.git
.gitignore
.
.
.

Wie mache ich das?

* Bearbeiten *

Das folgende Bild kann zur Klärung dieser Frage hilfreich sein.

  • Links ein mit dem GUI-Tool des Projekts erstelltes Archiv (von vor zwei Tagen).
  • Rechts ein mit dem obigen tarBefehl erstelltes Archiv.

Beachten Sie die Leiste „Standort“. Das Archiv auf der rechten Seite sollte sein /undnicht /./.

Bildbeschreibung hier eingeben

Antwort1

./bedeutet das aktuelle Verzeichnis. Ihre beiden Einträge sind identisch.

Die Angabe ./vor der Datei bei der Auflistung des Archivs hilft bei der Handhabung von Dateien mit einem speziellen Namen. Ein Dateiname -filewird angezeigt, der ./-filedie Verarbeitung durch ein zweites Tool zulässt.

Antwort2

Ändern Sie Ihren Befehl von

tar -czf $ARCHIVE_NAME -C $DIR .

Zu

tar -czf $ARCHIVE_NAME -C $DIR ./*

sollte funktionieren. Auf diese Weise sagen Sie nicht „Fügen Sie das Verzeichnis .dem Archiv hinzu“, sondern „Fügen Sie alle diese Dateien im Verzeichnis .dem Archiv hinzu“.

Antwort3

Dieser Befehl erstellt ein TAR-Archiv im aktuellen Verzeichnis ohne das führende ./:

tar cf /some/tarfile.tar *

Natürlich werden keine Dateinamen berücksichtigt, die mit einem Punkt beginnen, was wahrscheinlich auch nicht das ist, was Sie wollen. Sie können zusätzliche Platzhalter hinzufügen, um diese abzufangen:

tar cf /some/tarfile.tar * .[a-zA-Z]*

Dies ist jedoch keine Allzwecklösung; Sie müssen wissen, welche Dateinamen sich im Verzeichnis befinden, damit Sie entsprechende Platzhalter erstellen können.

GNU Tar – das von den meisten Linux-Distributionen verwendet wird – verfügt über eine Funktion zum Transformieren von Dateinamen mithilfe sedvon Ausdrücken. Dadurch werden die aus Dateien entfernt, ./während das Archiv erstellt wird:

tar cf /some/tarfile.tar --transform 's,^\./,,' .

Das resultierende Archiv enthält weiterhin einen Eintrag für das Verzeichnis "." selbst.

Einige Versionen von tarkönnen die Namen der zu tarnenden Dateien aus einer Datei lesen. Sie können diese Funktion zu folgendem Zweck nutzen:

ls -a | egrep -v '^\.\.?$' | tar cf - -T /dev/stdin

Diese Pipeline erstellt eine Liste aller Dateien im aktuellen Verzeichnis, entfernt die .und ..Einträge und leitet den Rest der Namen an weiter tar. tar erstellt das Archiv aus den Dateinamen, die aus /dev/stdin(seiner Standardeingabe) gelesen werden.

verwandte Informationen