Comportamiento
Para aclarar el tema, la siguiente EPM ilustra lo que está sucediendo:
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
Así que cada archivo y directorio tiene un archivo ._ añadido al archivo tar en el mismo directorio, como dijo mipadi. Este tar, llamémoslo mactar, evita las colisiones ignorando los archivos que empiezan con ._ en la entrada, por ejemplo, con:
mkdir p && touch p/._a p/._b
cas$ tar cv p p/._b > /dev/null
a ./._p
a p
la existencia del archivo p/._a es simplemente ignorada por el alquitrán, y también lo es el archivo p/._b, a pesar de que está explícitamente incluido en la invocación del CLI. Por lo tanto, no pueden ocurrir colisiones.
Controlando el alquitrán
Si tienes antecedentes en Unix, es probable que estés descontento con este comportamiento. El mactar carece de la documentación esperada: la página de manual es para el tar de Free BSD regular y no menciona esta idiosincrasia.
Sin embargo, la generación de los archivos para los meta-forks puede ser desactivada estableciendo una variable de entorno, así que: export COPYFILE_DISABLE=true
.
Historia
No tengo muy claro el momento, pero OSX comenzó con el regular Free BSD tar, luego Apple hizo circular una utilidad adicional, tar_hfs que fue el ancestro de mactar, y luego, creo que con Leopard, cambió /usr/bin/tar
para ser mactar.