La existencia de un archivo duplicado en el archivo no debería hacer que no sea válido o no se pueda extraer en OSX, ya que, de forma predeterminada, tar sobrescribe los duplicados.
Por lo tanto, estoy un poco confundido por el comportamiento de tu Gist: OSX tar permite la duplicación de archivos en un archivo (un retroceso a su propósito original como t ape ar , la utilidad de cebolleta, por lo que permite que los archivos se agreguen al final del archivo de cinta, y cuando el archivo se restaura, la versión más reciente del archivo sobrescribirá la versión (s) más antigua)
Solo cuando la opción "-k" está presente, tar debería advertir sobre archivos preexistentes.
Aquí creé un archivo con un archivo duplicado y luego lo extraje sin ningún problema. No fue hasta que agregué la opción -k que me advirtió sobre el archivo duplicado:
Macbook> tar --version
bsdtar 2.8.3 - libarchive 2.8.3
Macbook> mkdir test
Macbook> touch test/a test/b
Macbook> tar -zcvf test.tar.gz test test/a
a test
a test/a
a test/b
a test/a
Macbook> tar -ztvf test.tar.gz
drwxr-xr-x 0 user group 0 Jul 28 10:42 test/
-rw-r--r-- 0 user group 0 Jul 28 10:42 test/a
-rw-r--r-- 0 user group 0 Jul 28 10:42 test/b
-rw-r--r-- 0 user group 0 Jul 28 10:42 test/a
Macbook> rm -r test
Macbook> tar -xvf test.tar.gz
x test/
x test/a
x test/b
x test/a
Macbook> echo $?
0
Macbook> rm -r test
Macbook> tar -k -xvf test.tar.gz
x test/
x test/a
x test/b
x test/a: Already exists
tar: Error exit delayed from previous errors.
Macbook> echo $?
1
Un simple problema de umask tampoco parece ser el culpable, intenté cambiar mi umask a 0777 y todavía puedo extraer el archivo:
Macbook> tar -xvf test.tar
x test/
x test/a
x test/b
x test/a
Macbook> ls -l test
ls: test: Permission denied
Macbook> sudo ls -l test
total 0
---------- 1 someuser wheel 0 Jul 28 13:48 a
---------- 1 someuser wheel 0 Jul 28 13:48 b
Pensé que podía duplicar el problema agregando deliberadamente un directorio no grabable al archivo, pero eso no funcionó, tar no actualizó los permisos en el directorio cuando extrajo el archivo:
Macbook> mkdir -p testdir1/test testdir2/test
Macbook> touch testdir1/test/{a,b} testdir2/test/a
Macbook> chmod -w testdir2/test
Macbook> touch testdir2/test/b
touch: testdir2/test/b: Permission denied
Macbook> find testdir* -ls | awk '{print $3, $11}'
drwxrwx--- testdir1
drwxrwx--- testdir1/test
-rw-rw---- testdir1/test/a
-rw-rw---- testdir1/test/b
drwxrwx--- testdir2
dr-xr-x--- testdir2/test
-rw-rw---- testdir2/test/a
Macbook> cd testdir1
Macbook> tar -cvf ../test.tar test/*
a test/a
a test/b
Macbook> cd ../testdir2
Macbook> tar -rvf ../test.tar test
a test
a test/a
Macbook> cd ..
Macbook> tar -tvf ./test.tar
-rw-rw---- 0 username groupname 0 Jul 28 15:40 test/a
-rw-rw---- 0 username groupname 0 Jul 28 15:40 test/b
-rw-rw---- 0 username groupname 0 Jul 28 15:40 test/a
dr-xr-x--- 0 username groupname 0 Jul 28 15:40 test/
-rw-rw---- 0 username groupname 0 Jul 28 15:40 test/a
Macbook> tar -xvf test.tar
x test/a
x test/b
x test/a
x test/
x test/a
Macbook>
También intenté cambiar los permisos en la prueba / a a 000, agregarlo al archivo, luego agregar otra prueba / a, pero esa también funcionó bien:
drwxrwx--- 0 username groupname 0 Jul 28 15:40 test/
-rw-rw---- 0 username groupname 0 Jul 28 15:40 test/a
-rw-rw---- 0 username groupname 0 Jul 28 15:40 test/b
dr-xr-x--- 0 username groupname 0 Jul 28 15:40 test/
---------- 0 username groupname 0 Jul 28 15:40 test/a
-rw-rw---- 0 username groupname 0 Jul 28 15:40 test/a
Así que realmente me gustaría ver el archivo original que causó el problema y ver qué podría haber en ese archivo para causar este problema.
Si un nombre de archivo y un directorio comparten el mismo nombre, tar tiene un problema de extracción, pero tiene un mensaje de error bastante claro:
Macbook> tar -xvf test.tar
x test/
x test/dir1/
x test/dir1/a
x test/
x test/dir1: Can't remove already-existing dir
tar: Error exit delayed from previous errors.
(si el conflicto sucedió al revés, es decir, primero vino un archivo, luego apareció un directorio con el mismo nombre, tar simplemente lo elimina y crea el directorio:
Macbook> tar -xvf test.tar
x test/
x test/dir1
x test/
x test/dir1/
x test/dir1/a