Entfernt tar -xvf vorhandene Dateien aus dem Verzeichnis?


10

Ich habe ein Teerarchiv und möchte es verwenden tar -xvf.
In diesem Teerarchiv habe ich einen Verzeichnisbaum, der einige Dateien enthält. Auf meinem Solaris 10-System ist dieser Verzeichnisbaum bereits vorhanden und enthält mehrere Dateien.
Wenn ich das Archiv entpacke, wird der gesamte Verzeichnisbaum überschrieben oder werden nur die im Archiv enthaltenen Dateien überschrieben?
Werden die Dateien gelöscht, die keinen Korrespondenten im Archiv haben?


Sie können jederzeit eine Test-TAR und ein Test-Verzeichnis erstellen und ausprobieren ... Eine Antwort, die Sie sich selbst einfallen lassen, wird in Ihrem Kopf viel länger dauern als eine Antwort, die Ihnen hier jemand gibt.
Jarvin

Die Antwort ist nein. Wenn Sie gut genug nachdenken, werden Sie feststellen, dass es keinen Sinn macht, dass ein Programm zum Extrahieren von Dateien aus einem Archiv völlig unabhängige Dateien löscht.
Fosco

Antworten:


6

Bereits vorhandene doppelte Dateien können je nach System entpackt und überschrieben werden. Dies ist jedoch normalerweise standardmäßig der Fall. Dateien, die sich im Archiv befinden, sich jedoch nicht auf Ihrem System befinden, werden einfach neuen oder vorhandenen Verzeichnissen auf Ihrem System hinzugefügt.

Dir /test

/1/a
c

Archiv test.tar

/1/b
d

wird wahrscheinlich zusammengeführt mit:

/1/a
/1/b
c
d

Durch Hinzufügen des -kFlags zum Befehl tar wird sichergestellt, dass keine der Dateien in Ihrem Zielverzeichnis überschrieben wird:

tar -xvkf test.tar

@BP: Das Überschreiben kann von der Shell abhängig sein, da csh (immer noch Standard-Shell unter Sun?) Eine "noclobber" -Shellvariable hatte, die beim Setzen ein versehentliches Überschreibverhalten verhindert.
Hotei

Danke BloodPhilia und hotei. Ich habe einen Test auf meinem System durchgeführt und tar -xvf überschreibt die bereits vorhandenen Dateien und fügt diejenigen hinzu, die nicht vorhanden sind. Ich würde gerne wissen, ob die Möglichkeit besteht, dass ein gesamtes Verzeichnis überschrieben wird und somit die Dateien verloren gehen, die sich auf meinem System in diesem Verzeichnis befanden, aber nicht im Archiv waren. Zum Beispiel: Ich habe in dir.tar dir / file2. Auf meinem System habe ich dir / file1, dir / file2 und dir / file3. Ist es möglich, dass bei Ausführung von tar -xvf dir.tar das gesamte Verzeichnis überschrieben wird und Datei1 und Datei3 nicht mehr enthält?
Felicia

@hotei: noclobber(das übrigens auch in POSIX-Shells vorhanden ist) betrifft nur Dateien, auf die >fooin der Shell umgeleitet wird . Es hat keine Auswirkung auf Teer.
Gilles 'SO - hör auf böse zu sein'

@hotei noclobber verhindert, dass Sie Dateien durch Umleitung in der Shell überschreiben. Also echo foo > bar.txtwird bar.txt nicht überschrieben, wenn es existiert. Es hat keine Auswirkung darauf, was ein Programm wie tar überschreibt.
KeithB

1
@Felicia: Laut Single Unix löscht tar keine Dateien, die nicht im Archiv waren. Vorhandene Dateien werden mit dem Inhalt (aber nicht den Modi) aus dem Archiv überschrieben. Möglicherweise gibt es nicht konforme Teere, aber ich bezweifle, dass einer von ihnen nicht verwandte Dateien wie z dir/file1.
Gilles 'SO - hör auf böse zu sein'

0

Am einfachsten ist es, ein neues, leeres Verzeichnis zu erstellen, eine CD darauf zu erstellen und die Dateien dort zu extrahieren. Sie müssen jedoch darauf achten, dass die extrahierten Dateien relativ (beginnen mit ./) und nicht absolut (beginnen mit /) sind. Führen Sie das Inhaltsverzeichnis durch weniger, um festzustellen, was der Fall ist, wenn Sie es nicht wissen (tar -tvf tar_filename | less).

Sie können anhand der Manpage herausfinden, ob Ihre Tar-Version standardmäßig überschrieben wird oder nicht. Tar löscht während des Extrahierens keine Dateien. Dies ist ein weiterer Grund, warum Benutzer normalerweise vor dem Extrahieren aus einem neuen, leeren Verzeichnis starten.

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.