Entfernt tar -xvf vorhandene Dateien aus dem Verzeichnis?

19453
Felicia

Ich habe ein tar-Archiv und möchte es verwenden tar -xvf.
In diesem tar-Archiv habe ich einen Verzeichnisbaum, der ein paar 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 sind nur die im Archiv enthaltenen Dateien überschrieben?
Werden Dateien gelöscht, die keinen Korrespondenten im Archiv haben?

10
Sie können immer ein Testtar und ein Testverzeichnis erstellen und es ausprobieren. Eine Antwort, die Sie sich selbst einfallen lassen, wird in Ihrem Kopf viel länger dauern als eine Antwort, die Ihnen hier jemand gegeben hat. Jarvin vor 13 Jahren 0
Die Antwort ist nein. Wenn Sie intensiv nachdenken, werden Sie feststellen, dass es keinen Sinn macht, dass ein Programm zum Extrahieren von Dateien aus einem Archiv vollständig nicht zusammenhängende Dateien löscht. Fosco vor 13 Jahren 0

2 Antworten auf die Frage

5
BloodPhilia

Doppelte Dateien, die bereits vorhanden sind, werden je nach System möglicherweise entpackt und überschrieben. Dies geschieht jedoch normalerweise standardmäßig. Dateien, die sich im Archiv befinden, aber nicht in Ihrem System, werden einfach zu neuen oder vorhandenen Verzeichnissen auf Ihrem System hinzugefügt.

Dir /test

/1/a c 

Archiv test.tar

/1/b d 

wird wahrscheinlich verschmolzen zu:

/1/a /1/b c d 

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

tar -xvkf test.tar 
@ BP: Overwrite kann von der Shell abhängig sein, da csh (immer noch Standard-Shell auf Sun?) Eine Shell-Variable "noclobber" hatte, die, wenn gesetzt, ein versehentliches Überschreibverhalten verhindert. hotei vor 13 Jahren 0
Danke BloodPhilia und hotei. Ich habe einen Test auf meinem System durchgeführt und tar -xvf überschreibt die bereits vorhandenen Dateien und fügt die nicht vorhandenen hinzu. Was ich gerne wissen möchte, ist, wenn die Möglichkeit besteht, dass ein gesamtes Verzeichnis überschrieben wird und dadurch die Dateien verloren gehen, die sich auf meinem System in diesem Verzeichnis befanden, aber nicht im Archiv waren. Zum Beispiel: Ich habe dir.tar dir / file2. Auf meinem System habe ich dir / file1, dir / file2 und dir / file3. Ist es möglich, dass das gesamte Verzeichnis überschrieben wird, wenn ich tar -xvf dir.tar ausführt, und dass es nicht mehr file1 und file3 enthält? Felicia vor 13 Jahren 0
@hotei: `noclobber` (das auch in POSIX-Shells u.ä. vorhanden ist) betrifft nur Dateien, die mit`> foo` in der Shell umgeleitet werden. Es hat keine Auswirkungen auf Teer. Gilles vor 13 Jahren 0
@hotei noclobber verhindert, dass Dateien durch Umleitung in der Shell überschrieben werden. `Echo foo> bar.txt` überschreibt also bar.txt nicht, falls es existiert. Es hat keinen Einfluss darauf, was ein Programm wie tar überschreiben wird. KeithB vor 13 Jahren 0
@Felicia: Gemäß Single Unix löscht tar keine Dateien, die sich nicht im Archiv befanden. Dabei werden vorhandene Dateien mit dem Inhalt (nicht jedoch den Modi) aus dem Archiv überschrieben. Es gibt möglicherweise nicht-konforme Teer in der Umgebung, aber ich bezweifle, dass einer von ihnen nicht zusammenhängende Dateien wie `dir / file1` überschreiben würde. Gilles vor 13 Jahren 1
@ Gilles: Dein Kommentar ist sehr hilfreich. Danke vielmals. Felicia vor 13 Jahren 0
0
hotei

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

Ob Ihre tar-Version standardmäßig überschrieben wird oder nicht, können Sie der Manpage entnehmen. Tar löscht keine Dateien während des Extrahierens. Dies ist ein weiterer Grund, warum die Benutzer normalerweise mit einem neuen, leeren Verzeichnis beginnen, bevor sie das Extrahieren durchführen.