Observo el siguiente comportamiento con tar 1.26 y 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
Entonces, lo que estoy tratando de hacer aquí es extraer un archivo tar en una estructura de directorio existente, donde no soy el propietario de todos los directorios involucrados pero sí tengo permiso de escritura en todos ellos. De hecho, se comparten entre un grupo.
No me importan las marcas de tiempo, y confío en que los permisos ya deberían ser correctos. Estoy ejecutando esto como un usuario normal, por lo que no debería intentarlo a --preserve-permissions
menos que se lo indiquen, lo que no hice. Lo que realmente me preocupa es el estado de salida: tengo la intención de usar esto en un script y quiero saber si la extracción real funcionó bien.
¿Hay una opción para tar que le dice que no establezca permisos de directorio, ni de inmediato ni retrasado? De lo contrario, ¿qué otras soluciones sugeriría? En este momento estoy pensando en extraer a un directorio temporal y usarlo rsync
para mover cosas al árbol existente. Pero quizás conoces un enfoque menos hack.