Erstellen Sie ein Tar-Archiv des aktuellen Verzeichnisses ohne vorhergehenden Punkt


10

Wenn ich folgendes mache:

tar czvf ../myarchive.tar.gz ./

Ich bekomme einen einzelnen (nervigen) Stammordner in meinem Teerarchiv:

nervig

Wie entferne ich diese schreckliche Zeit beim Erstellen des Archivs?


Diese Antwort zum Stapelüberlauf kann Ihnen helfen.
11.

3
Oder verwenden Sie --transform/ --xform, wie von Magnus vorgeschlagen :tar -cf /path/to/output.tar -C /path/to/input-directory . --xform='s!^\./!!'
n.st

Antworten:


6

Das tust du nicht.

name=${PWD##*/}
cd ..
tar czf "$name.tar.gz" "$name"

(Hinweis: Dies funktioniert nicht, wenn in Ihrer Shell die Verfolgung symbolischer Links des aktuellen Verzeichnisses aktiviert ist und auf das aktuelle Verzeichnis über einen symbolischen Link zugegriffen wird.)

Ja, das haben Sie nicht gefragt, aber das sollten Sie tun. Archive, die viele Dateien im aktuellen Verzeichnis erweitern, sind ärgerlich: Sie müssen jeder Person, die das Archiv entpackt, ein Zielverzeichnis für die Datei erstellen. Wenn sie diese versehentlich in ein nicht leeres Verzeichnis entpacken, ist dies schwierig Aufräumen. In den meisten Fällen sollte ein Archiv ein einzelnes Verzeichnis auf oberster Ebene erstellen, dessen Name der Basisname des Archivs ist.


Verstanden. Wenn ich mich richtig erinnere, ist es nur sehr ärgerlich, einen zusätzlichen Schritt ausführen zu müssen, um ein Archiv in ein bestimmtes Verzeichnis zu entpacken (z. B. tar xzvf archive.tar.gz && mv archive/* /outputvs. unzip archive.zip -d /output)
Naftuli Kay

9

Der Punkt wird angezeigt, weil tardie Pfadstruktur so erstellt wird, wie Sie sie in den Argumenten angegeben haben. Also wie du gegeben hast . Als Quelle wird auch das Archiv in derselben Struktur erstellt.

Sie können dies versuchen und überprüfen:

tar -czvf ../myarchive.tar.gz *

Aktualisierung der Antwort mit Hilfe des Kommentars von n.st.

tar --xform s:'./':: -czvf ../myarchive.tar.gz ./

1
Der *Glob stimmt nicht mit versteckten Dateien überein.
11.

: D eh ... nur ein Anfänger ... wusste es nicht.
Anfänger

Sie könnten weitere Bash-Globs verwenden, um versteckte Dateien einzuschließen - schauen Sie hier vorbei .
n.st

0

füge besser ^ vor dem vorhergehenden hinzu.

tar --xform s:'^./':: -czvf ../myarchive.tar.gz ./

ODER alle "/" im vollständigen Pfadnamen im Archiv werden entfernt, es sei denn, "/" ist das Ende des vollständigen Pfadnamens.


1
Bitte schlagen Sie eine Bearbeitung dieser Antwort vor, anstatt eine separate Antwort zu veröffentlichen: unix.stackexchange.com/posts/144094/edit
muru
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.