Erstellen Sie die TAR-Datei nicht in dem Verzeichnis, das Sie packen:
tar -czf /tmp/workspace.tar.gz .
macht den Trick, außer dass die Dateien beim Entpacken im gesamten aktuellen Verzeichnis extrahiert werden. Besser zu tun:
cd ..
tar -czf workspace.tar.gz workspace
oder, wenn Sie den Namen des Verzeichnisses, in dem Sie sich befanden, nicht kennen:
base=$(basename $PWD)
cd ..
tar -czf $base.tar.gz $base
(Dies setzt voraus, dass Sie keinen Symlinks gefolgt sind, um dorthin zu gelangen, wo Sie sich befinden, und dass die Shell nicht versucht, Sie zu erraten, indem sie durch einen Symlink rückwärts springt. bash
Dies ist in dieser Hinsicht nicht vertrauenswürdig. Wenn Sie sich darüber Sorgen machen müssen, Verwenden Sie cd -P ..
, um ein physisches Änderungsverzeichnis zu erstellen. Dumm, dass es aus meiner Sicht nicht das Standardverhalten ist - zumindest verwirrend für diejenigen, für die es cd ..
nie eine alternative Bedeutung gab.)
Ein Kommentar in der Diskussion sagt:
Ich muss [...] das oberste Verzeichnis ausschließen und [...] den Teer im Basisverzeichnis ablegen.
Der erste Teil des Kommentars ist wenig sinnvoll. Wenn die TAR-Datei das aktuelle Verzeichnis enthält, wird sie beim Extrahieren der Datei aus diesem Archiv nicht erstellt, da das aktuelle Verzeichnis per Definition bereits vorhanden ist (außer unter sehr seltsamen Umständen) ).
Der zweite Teil des Kommentars kann auf zwei Arten behandelt werden:
- Entweder: Erstellen Sie die Datei an einem anderen Ort -
/tmp
ist ein möglicher Speicherort - und verschieben Sie sie nach Abschluss wieder an den ursprünglichen Speicherort.
- Oder: Wenn Sie GNU Tar verwenden, verwenden Sie die
--exclude=workspace.tar.gz
Option. Die Zeichenfolge nach dem =
ist ein Muster - das Beispiel ist das einfachste Muster - eine genaue Übereinstimmung. Möglicherweise müssen Sie angeben, --exclude=./workspace.tar.gz
ob Sie entgegen den Empfehlungen im aktuellen Verzeichnis arbeiten. Möglicherweise müssen Sie angeben, --exclude=workspace/workspace.tar.gz
ob Sie wie vorgeschlagen eine Ebene bearbeiten. Wenn Sie mehrere TAR-Dateien ausschließen möchten, verwenden Sie ' *
' wie in --exclude=./*.gz
.