Comportamento
Per motivi di chiarezza sul problema, il seguente MWE illustra cosa sta succedendo:
cas$ tar --version
bsdtar 2.6.2 - libarchive 2.6.2
cas$ mkdir o
cas$ touch o/a o/b
cas$ tar cv o > /dev/null
a ./._o
a o
a o/._a
a o/a
a o/._b
a o/b
Quindi ogni file e directory ha un file ._ aggiunto al file tar nella stessa directory, come diceva mipadi. Questo tar, chiamiamolo mactar, evita le collisioni ignorando i file che iniziano con ._ nell'input, ad es. Con:
mkdir p && touch p/._a p/._b
cas$ tar cv p p/._b > /dev/null
a ./._p
a p
l'esistenza del file p /._ viene semplicemente ignorata da tar, e così pure il file p /._ b, anche se questo è esplicitamente incluso nel richiamo CLI. Pertanto, non si possono verificare collisioni.
Controllo tar
Se hai uno sfondo Unix, probabilmente non sei soddisfatto di questo comportamento. Il mactar manca della documentazione prevista: la pagina man è per il normale tar gratuito di BSD e non menziona questa idiosincrasia.
Tuttavia, la generazione dei file per le meta fork può essere disabilitata impostando una variabile di ambiente, quindi: export COPYFILE_DISABLE=true
.
Storia
Non sono abbastanza chiaro sui tempi, ma OSX ha iniziato con il normale tar Free BSD, quindi Apple ha diffuso un'ulteriore utility, tar_hfs che era l'antenato di mactar, e quindi, penso con Leopard, ha cambiato /usr/bin/tar
essere mactar.