Update-Datei in Tar

Update-Datei in Tar

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 tarunter 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.

verwandte Informationen