L'esistenza di un file duplicato nell'archivio non dovrebbe renderlo non valido o impossibile da estrarre su OSX, poiché per impostazione predefinita, il tar sovrascrive i duplicati.
Quindi, sono un po 'confuso dal comportamento nel tuo Gist - Il tar OSX consente di duplicare i file in un archivio (un ritorno al suo scopo originale come t ape ar utilità di erba cipollina, quindi consente di aggiungere file alla fine dell'archivio nastro e, quando l'archivio viene ripristinato, la versione più recente del file sovrascriverà la (e) versione (i) precedente (i))
È solo quando è presente l'opzione "-k" che tar dovrebbe avvertire sui file preesistenti.
Qui ho creato un archivio con un file duplicato e l'ho estratto senza problemi. Non è stato fino a quando ho aggiunto l'opzione -k che mi ha avvertito del file duplicato:
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
Anche un semplice problema di umask non sembra essere il colpevole, ho provato a cambiare la mia umask in 0777 e posso ancora estrarre l'archivio:
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
Pensavo di poter duplicare il problema aggiungendo deliberatamente una directory non scrivibile all'archivio, ma non funzionava, tar non aggiornava le autorizzazioni sulla directory quando estraeva l'archivio:
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>
Ho anche provato a cambiare le autorizzazioni su test / a su 000, aggiungendolo all'archivio, quindi aggiungendo un altro test / a, ma anche quello funzionava bene:
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
Quindi mi piacerebbe davvero vedere l'archivio originale che ha causato il problema e vedere cosa avrebbe potuto essere in quell'archivio per causare questo problema.
Se un nome file e una directory hanno lo stesso nome, tar ha un problema di estrazione, ma ha un messaggio di errore abbastanza chiaro:
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.
(se il conflitto si verificava al contrario, cioè prima veniva un file, poi veniva una directory con lo stesso nome, tar lo rimuove e crea la directory:
Macbook> tar -xvf test.tar
x test/
x test/dir1
x test/
x test/dir1/
x test/dir1/a