Ich versuche, tar
eine Sammlung von Dateien in einem Verzeichnis namens "Mein_Verzeichnis" zu erstellen und die Originale mit dem folgenden Befehl zu entfernen:
tar -cvf files.tar my_directory --remove-files
Es werden jedoch nur die einzelnen Dateien im Verzeichnis entfernt und nicht das Verzeichnis selbst (was ich im Befehl angegeben habe). Was vermisse ich hier?
BEARBEITEN:
Ja, ich nehme an, die Option 'Dateien entfernen' ist ziemlich wörtlich. Obwohl ich auch die Manpage in diesem Punkt unklar fand. (Unter Linux neige ich dazu, nicht wirklich viel zwischen Verzeichnissen und Dateien zu unterscheiden und vergesse manchmal, dass sie nicht dasselbe sind). Es sieht so aus, als würde der Konsens darin bestehen, keine Verzeichnisse zu entfernen.
Mein wichtigster Anlass, diese Frage zu stellen, ist jedoch der Umgang von tar mit absoluten Pfaden. Da Sie einen relativen Pfad zu einer oder mehreren zu komprimierenden Dateien angeben müssen, müssen Sie in das übergeordnete Verzeichnis wechseln, um sie ordnungsgemäß zu tarieren. Wie ich sehe, ist es in dieser Situation potenziell gefährlich, einen 'rm'-Folgebefehl zu verwenden. Daher hoffte ich, die Dinge zu vereinfachen, indem ich Teer dazu brachte, das Entfernen selbst durchzuführen.
Stellen Sie sich beispielsweise ein Sicherungsskript vor, in dem das zu sichernde Verzeichnis (z. B. tar) als Shell-Variable enthalten ist. Wenn dieser Shell-Variablenwert falsch eingegeben wurde, können möglicherweise Dateien aus dem Verzeichnis gelöscht werden, in dem Sie sich zuletzt befanden.
Antworten:
Es fehlt der Teil, der besagt, dass die
--remove-files
Option Dateien entfernt , nachdem sie zum Archiv hinzugefügt wurden.Sie können die Archivierungs- und Dateientfernungsoperation mit einem Befehl wie dem folgenden verfolgen:
Update: Sie könnten daran interessiert sein, diese kurze Debian-Diskussion über
Bug 424692 zu lesen: --remove-files beklagt, dass Verzeichnisse sich "während des Lesens geändert haben" .
quelle
-c
Ändert das Verzeichnis, bevortar
die Arbeit beginnt (und die Art kommt erst wieder, wenn es fertig ist)? Ich denke, es hätte Unterverzeichnisse gelöscht, wenn diese im Archiv enthalten wären (aber ich habe das nicht getestet).c'
etwas damit zu tun hat;'remove-files'
Entfernt absichtlich keine Verzeichnisse.man
Seiten nicht allzu klar, aber ich gehe davon aus, dass Sie Recht haben. Trotzdem würde ich nicht erwarten, dass das erwähnte Verzeichnis-c
entfernt wird, selbst wenntar
dies auch für das Entfernen von Verzeichnissen zutrifft. (Für mich wäre das wie das Entfernen des aktuellen Verzeichnisses, also einschließlich des Archivs selbst, wenn ich es nicht benutze-c
...?) Aber wenn-remove-files
immer Verzeichnisse vorhanden bleiben, dann erschwere ich hier sicherlich nur die Dinge. ;-)--remove-files
Fehler wurde behoben intar-1.19
.Da die
--remove-files
Option nur Dateien entfernt , können Sie es versuchenDamit wird das Verzeichnis nur dann entfernt, wenn der
tar
Exit-Status 0 zurückgibtquelle
rmdir
Entfernt aber nur leere Verzeichnisse. Die Idee war, das Verzeichnis und die darin enthaltenen Dateien zu entfernen (vorausgesetzt, diestar
ist erfolgreich)--remove-files
Fehler wurde behoben intar-1.19
.Haben Sie versucht, die Direktive --remove-files nach dem Archivnamen zu setzen? Für mich geht das.
quelle
--remove-files
davor oder danachmy_directory
setze. In beiden Fällen wird das Verzeichnis entfernt.--remove-files
Fehler wurde behoben intar-1.19
.z.B
z.B
Dann könnten Sie etwas in folgender Weise ausführen:
quelle
Dies war wahrscheinlich ein Fehler.
Auch das Wort "Datei" ist in diesem Fall nicht eindeutig. Aber da dies ein Befehlszeilenschalter ist, würde ich erwarten, dass dies auch Verzeichnisse bedeutet, da in Unix / Linux alles eine Datei ist, auch ein Verzeichnis. (Die andere Interpretation ist natürlich auch gültig, aber es macht keinen Sinn, in einem solchen Fall Verzeichnisse zu führen. Ich würde es als unerwartetes und verwirrendes Verhalten betrachten.)
Aber ich habe festgestellt, dass in gnu tar auf einigen Distributionen gnu tar tatsächlich den Verzeichnisbaum entfernt. Ein weiterer Hinweis darauf, dass das Halten des Baumes ein Fehler war. Oder zumindest eine Problemumgehung, bis sie es behoben haben.
Folgendes habe ich auf einer Ubuntu 10.04-Konsole ausprobiert:
Wenn Sie es auf Ihrem Computer sehen möchten, fügen Sie es auf eigene Gefahr in eine Konsole ein:
quelle