tar: So erstellen Sie eine tar-Datei mit beliebig führenden Verzeichnissen, ohne sie in das übergeordnete Verzeichnis zu kopieren

23

Angenommen, ich habe ein Dateiverzeichnis unter

/home/user1/dir1

und ich möchte einen tar mit nur "dir1" als führendem Verzeichnis erstellen:

/dir1/file1
/dir1/file2

Ich weiß, ich kann zuerst in das Verzeichnis CD

cd /home/user1/
tar czvf dir1.tar.gz dir1

Beim Schreiben von Skripten ist es jedoch nicht immer günstig, von Verzeichnis zu Verzeichnis zu springen. Ich frage mich, gibt es eine Möglichkeit, dies mit absoluten Pfaden zu tun, ohne die aktuellen Verzeichnisse zu ändern?

Ich weiß, ich kann immer eine TAR-Datei mit absoluten Pfaden INSIDE erstellen und verwenden

--strip-components 

Beim Extrahieren sind aber manchmal zusätzliche Pfadnamen zusätzliche private Informationen, die Sie nicht mit Ihren tar-Dateien verteilen möchten.

Vielen Dank!

Yan
quelle

Antworten:

24

tar -C wechselt das Verzeichnis

tar -C /home/user1/ -cvzf dir1.tar.gz dir1

Übrigens, praktisch, um den Überblick über das Wechseln von Verzeichnissen zu behalten ... benutze pushd und popd.

pushd .
cd /home/user1
tar cvfz dir1.tar.gz
popd
Philip Reynolds
quelle
1
Vielen Dank. Ich wusste nicht, dass die Option "-C" vor anderen Optionen verwendet werden muss ... Ich habe zuvor "tar -cvzf dir1.tar.gz dir1 -C / home / user1 /" ausprobiert, aber es hat nicht funktioniert.
Yan
1
Funktioniert nicht: tar: dir: Kann nicht angeben: Keine solche Datei oder kein solches Verzeichnis (vorausgesetzt, dir1 befindet sich unter / home / user1 /)
tribbloid
21

Mit gnu tar können Sie ein Archiv mit einem anderen Basisverzeichnis erstellen als mit:

tar -c --transform 's,^\.,mybasedir,' .

Passen Sie den sed-Ausdruck einfach an Ihre Bedürfnisse an.

Christophe Drevet-Droguet
quelle
5

OK, das habe ich auch herausgefunden

tar -czvf file1.tar.gz /home/user1/dir1/../dir1

hat auch so funktioniert wie ich wollte.

Yan
quelle
Obwohl Platzhalter wie "*" dann nicht funktionieren
Curtis Yallop
2
tar -C /home/user1/dir -c .
Michael Graff
quelle