Vermeiden Sie Fehler von tar beim Wiederherstellen von Verzeichnisberechtigungen

13

Ich beobachte das folgende Verhalten mit Teer 1.26 und 1.27.1:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b -xvf test.tar diffowner
diffowner/
diffowner/foo
tar: diffowner: Cannot utime: Operation not permitted
tar: diffowner: Cannot change mode to rwxr-xr-x: Operation not permitted
tar: Exiting with failure status due to previous errors

Ich versuche hier also, eine TAR-Datei in eine vorhandene Verzeichnisstruktur zu extrahieren, in der ich nicht der Eigentümer aller beteiligten Verzeichnisse bin, aber für alle Schreibrechte habe. Tatsächlich werden sie unter einer Gruppe geteilt.

Zeitstempel interessieren mich nicht und ich vertraue darauf, dass die Berechtigungen bereits korrekt sind. Ich führe dies als normaler Benutzer aus, es sollte also nicht versucht werden, es --preserve-permissionssei denn, ich habe es so erklärt, was ich nicht tat. Was mich wirklich beunruhigt, ist der Beendigungsstatus: Ich beabsichtige, dies in einem Skript zu verwenden und möchte wissen, ob die eigentliche Extraktion gut funktioniert hat.

Gibt es eine Option , um Teer , die es sagt nicht zu Satz Verzeichnisberechtigungen, weder unmittelbar noch verzögert? Andernfalls, welche anderen Lösungen würden Sie vorschlagen. Im Moment denke ich darüber nach, in ein temporäres Verzeichnis zu extrahieren und rsyncDinge in den vorhandenen Baum zu verschieben. Aber vielleicht kennen Sie einen weniger hackigen Ansatz.

MvG
quelle
1
Sie fragen sich, ob es eine Möglichkeit gibt, dies zur Teererzeugungszeit im Gegensatz zur Extraktion zu tun.
Roy Truelove

Antworten:

22

Diese tarOption könnte das sein, wonach Sie suchen:

 --no-overwrite-dir
       preserve metadata of existing directories

Ich habe wie folgt getestet:

$ mkdir a b a/diffowner
$ sudo mkdir b/diffowner
$ sudo chmod a+w b/diffowner
$ echo foo > a/diffowner/foo
$ tar -C a -cvf test.tar diffowner
diffowner/
diffowner/foo
$ tar -C b --no-overwrite-dir -xvf test.tar diffowner
diffowner/
diffowner/foo
$ echo $?
0
terdon
quelle
1
Funktionierte auch für meinen Fall, in dem ich ein tar-Archiv auf eine gemountete Samba-Freigabe extrahierte. Beachten Sie, dass anders als der Befehl vorschlägt, der Fehler auch unterdrückt wird, wenn das Ziel leer ist (dh alle Verzeichnisse, die Fehler verursachen würden, wurden von tar selbst erstellt). Danke noch einmal!
user149408