
für Linux Tar-Befehl:
tar uf test.tar test.txt
aber für *BSD bsdtar Befehlsoption u = r = Anhängen, das heißt, die Datei kann nicht aktualisiert werden, kann nur Datei anhängen und auch, ich versuche kompiliertBibliotheksarchivhat bewiesen, dass bsdtar die Datei in Tar nicht aktualisieren kann.
Warum kann also der Tar-Befehl in Linux Dateien im Tar-Archiv aktualisieren, bsdtar jedoch nicht?
beziehen auf: tar (Linux) Teer (OpenBSD)
Antwort1
für *BSD bsdtar Befehlsoption u = r = Anhängen, d.h. Datei kann nicht aktualisiert werden
Ich denke, sie hängen beide an, man tar
unter Linux heißt es
-r, --append
append files to the end of an archive
…
-u, --update
only append files that are newer than the existing in archive
Hier ist ein Test, der das beweist
$ uname -s
Linux
$ tar --version
tar (GNU tar) 1.15.1
$ echo aaa > a.txt
$ echo bbb > b.txt
$ echo ccc > c.txt
$ tar cvf x.tar *txt
a.txt
b.txt
c.txt
$ echo BBB > b.txt
$ tar -uvf x.tar b.txt
b.txt
$ tar tvf x.tar
-rw-rw-r-- ian/ian 4 2012-11-08 16:43:10 a.txt
-rw-rw-r-- ian/ian 4 2012-11-08 16:43:17 b.txt
-rw-rw-r-- ian/ian 4 2012-11-08 16:43:26 c.txt
-rw-rw-r-- ian/ian 4 2012-11-08 16:48:22 b.txt
Beachten Sie, dass die Tar-Datei jetzt sowohl alte als auch neue Versionen von b.txt enthält
OK, also weiter zum Kern Ihrer Frage
Warum kann der Tar-Befehl in Linux Dateien im Tar-Archiv aktualisieren, bsdtar jedoch nicht?
Sie können Gnu Tar in BSD in installieren /usr/local/bin/gtar
.
SehenPaketinformationen für gtar-1.21-static.tgz (sh)
Aktualisieren:
Warum kann Tar nicht direkt aktualisiert werden?
Direktzugriff vs. serielle Medien
Der Name „tar“ ist eine Abkürzung von „tape archive“. Der Befehl ist für Archive gedacht, die auf seriellen Medien wie Bändern gespeichert sind. Das Bandlaufwerk kann keine neuen Bandstücke in die Mitte Ihres Bandes einlegen oder vorhandene Bandabschnitte ausschneiden. Es kann auch nicht gleichzeitig lesen und schreiben. Um ein Band mit den Inhalten a.txt, b.txt, c.txt in ein Band mit einer größeren b.txt-Datei umzuwandeln, muss zuerst das gesamte Band gelesen, der Inhalt gespeichert (im Speicher oder auf der Festplatte) und dann das Band zurückgespult und der neue Inhalt vollständig geschrieben werden. Es ist schneller, die Markierung am Bandende zu suchen und die neue Version von b.txt anzuhängen.
Außerdem fügen viele Bandlaufwerke (z. B. DAT) am Ende jedes Schreibvorgangs automatisch eine Bandendemarkierung hinzu, was sich nicht verhindern lässt. Daher würde das erneute Schreiben einer b.txt-Datei gleicher oder kleinerer Größe an ihrer bestehenden Position die c.txt-Datei dauerhaft unzugänglich machen.
Dateisystemprobleme
Es ist nicht möglich, Inhalte in der Mitte einer Datei durch Inhalte anderer Länge zu ersetzen. Um eine Datei mit „bbb“ durch eine Datei mit „bbbbbb“ zu ersetzen, müssen Sie die alte Datei lesen und eine neue Datei schreiben. Daher ist es immer noch einfacher (und möglicherweise erheblich schneller), „bbbbbb“ (plus Dateimetadatenheader) an das Ende anzuhängen.