TAR-Dateien aus einem anderen Verzeichnis, ohne sie zu kopieren

10

Dies sollte für Experten hier sehr einfach sein.

Ich habe ein Linux-Konto mit einem Benutzer-Festplattenkontingent von nur 6 GB. Es gibt einen /optDatenordner mit ca. 3 GB Daten, bei Komprimierung 1 GB. Es gibt einige symbolische Links innerhalb data-folder. Normalerweise habe ich für die Erstellung einer Arbeitssicherung Folgendes ausgeführt.

cp -rvfL /opt/data-folder ~/
cd ~/
tar -zcvf data-folder.tar.gz data-folder
rm -rvf data-folder

Jetzt habe ich bereits 2,5 GB in meinem Benutzerfestplattenkontingent verbraucht. Ich habe gerade genug Speicherplatz, um Dateien nach Hause zu kopieren, aber nicht tarwieder.

Gibt es eine Möglichkeit, den Ordner in einem einzigen Befehl zu tarieren und zu kopieren, beispielsweise mithilfe einer Pipe?

PS Ich kann nicht tarieren, /optda ich nur Lesezugriff auf habe /opt.

Kamath
quelle
Sie können sicher tarieren / opt, Sie können dort nicht schreiben , das ist alles. Das 'f'-Flag für tar (3) besagt, dass das Ergebnis in dieser Datei abgelegt werden soll, die sich sehr gut an einer anderen Stelle befinden kann. Dh cd /opt; tar zcf $HOME/junk.tar.gz junk.
vonbrand

Antworten:

5

Sie möchten eine TAR-Datei erstellen, die sich nicht an dem Ort befindet, an dem sich die Dateien befinden, die Sie tar benötigen?

Es gibt viele Möglichkeiten, dies zu tun.

Wenn es lokal erstellt werden soll (= auf demselben Computer):

tar czvf /path/to/destination/newfile.tar.gz  ./SOURCEDIR_OR_FILES

Sie können tar am Ende dieses Befehls zusätzliche Dateien oder Verzeichnisse hinzufügen.

Wenn es remote erstellt werden soll (dh Sie möchten die TAR-Datei auf einem Remote-Host aus demjenigen erstellen, der die zu tarierenden Daten enthält):

tar czvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cat > newfile.tar.gz'

Die spätere Version ist sehr vielseitig. Zum Beispiel können Sie auch ein Verzeichnis + Unterverzeichnisse mit derselben Technik "duplizieren":

Duplizieren Sie ein Verzeichnis + Unterverzeichnisse in ein anderes lokales Verzeichnis:

tar cf - ./SOURCEDIR_OR_FILES | ( cd LOCAL_DEST_DIR && tar xvf - )

Duplizieren Sie ein Verzeichnis + Unterverzeichnisse in ein anderes Remote-Verzeichnis:

tar cvf - ./SOURCEDIR_OR_FILES | ssh user@host 'cd REMOTE_DEST_DIR && tar xf - '

Löschen Sie das 'v', wenn Sie es nicht benötigen, um Dateien anzuzeigen, da sie tariert (oder nicht geteert) sind: Es geht dann viel schneller, sagt aber nicht viel, es sei denn, es liegt ein Fehler vor.

Ich benutze ". / ..." für die Quelle, um tar zu zwingen, es als RELATIVEN Pfad zu speichern. In einigen Fällen möchten Sie zusätzliche Pfadinformationen hinzufügen:

Um beispielsweise die crontab-Dateien zu tarieren, einschließlich der in / etc, können Sie Folgendes tun:

cd / ; tar czf all_crons.tgz  ./etc/*cron*  ./var/spool/cron

Ich verwende absichtlich den relativen Pfad: Einige ALTE Versionen von tar können gefährlich sein und Dateien mit ihrem ursprünglichen GLOBAL-Pfad extrahieren, was bedeutet, dass Sie cd /safedir ; tar xvf sometarFolgendes tun können: und die Dateien mit globalen Namen überschreiben Dateien an ihrem ursprünglichen Pfad, der AUSSERHALB von / safedir liegt und nicht darunter! Sehr gefährlich und immer noch möglich, da es alte Produktionsserver gibt. Es ist besser, immer relative Pfade zu verwenden, selbst wenn Sie einen neueren Teer verwenden.

Olivier Dulac
quelle
Bei einem anderen geht es nicht um Unterschiede zwischen Teeren: Bei einigen müssen Sie möglicherweise -cvfstattdessen verwenden cvf, bei anderen wird der -Stil nicht erkannt . Und bedeutete zfrüher "Komprimieren mit 'Komprimieren'", aber auf 'aktuellem' Teer bedeutet es "Komprimieren mit gzip". Sie können wissen, welche Komprimierung für eine Datei verwendet wird mit : file zefile. Und benennen Sie es dann entsprechend um (wenn Ihr Teer verwendet wird compress, sollte es besser in .tar.Z und nicht in .tar.gz umbenannt werden)
Olivier Dulac
0

Verwenden Sie die -hOption tar. Von der Manpage:

-h, --dereference
don't archive symlinks; archive the files they point to

so können Sie verwenden tar -zcvfh data-folder.tar.gz /opt/data-folder

harish.venkat
quelle
Ohh, ich hätte es erwähnen sollen, ich habe bereits tar -zcvfh ~ / data-folder.tar.gz / opt / data-folder ausprobiert. Ich gerate in eine Art kreisförmiges Archivproblem. Ich kopiere immer wieder einige Dateien und höre nie auf.
Kamath
Es sieht so aus, als ob sich in einem Unterordner mit Daten ein kreisförmiger symbolischer Link befindet.
Kamath
2
@AUZKamath, das ist ein Fehler in GNU Teer. Vielleicht möchten Sie bsdtarstattdessen versuchen , oder pax( cd /opt && pax -Lw data-folder | gzip > ~/data-folder.tar.gz), die die Schleifen erkennen würde
Stéphane Chazelas
1
@AUZKamath Sie können die Dateien gleichzeitig tarieren und aus Ihrem Home-Verzeichnis entfernen tar -rf <tarfilename> <filename>, um sie zu einer vorhandenen tar-Datei hinzuzufügen.
harish.venkat
1
@ Stephen Chazelas, es funktioniert, du solltest es als Antwort aufstellen.
Kamath