Obserwuję następujące zachowanie zarówno dla tar 1.26, jak i 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
Więc próbuję tutaj wyodrębnić plik tar do istniejącej struktury katalogów, w której nie jestem właścicielem wszystkich zaangażowanych katalogów, ale mam uprawnienia do zapisu na wszystkich z nich. W rzeczywistości są one wspólne dla grupy.
Nie dbam o znaczniki czasu i ufam, że uprawnienia powinny już być poprawne. Używam tego jako zwykłego użytkownika, więc nie powinno się tego próbować, --preserve-permissions
chyba że powiedziano mi to, czego nie zrobiłem. To, co naprawdę mnie martwi, to status wyjścia: zamierzam użyć tego w skrypcie i chcę wiedzieć, czy faktyczna ekstrakcja działała dobrze.
Czy istnieje opcja tar, która mówi, aby nie ustawiać uprawnień do katalogu, ani natychmiast, ani z opóźnieniem? W przeciwnym razie, jakie inne rozwiązania byś zaproponował. Teraz myślę o rozpakowaniu do katalogu tymczasowego i użyciu rsync
do przeniesienia rzeczy do istniejącego drzewa. Ale może znasz mniej hackerskie podejście.
Odpowiedzi:
Ta
tar
opcja może być tym, czego szukasz:Testowałem w następujący sposób:
źródło