Obtenga mac tar para dejar de poner nombres de archivo ._ * en archivos tar [duplicado]

46

Posible duplicado:
¿Por qué obtengo archivos como ._foo en mi tarball en OS X?

Creo scripts de autoconf en una Mac. Cuando se ejecuta tar, pone todos estos nombres ._ foobar en el archivo:

libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpf
libewf-20110312/borlandc/builder5/ewfacquire/._ewfacquire.bpr
libewf-20110312/borlandc/builder5/ewfacquire/ewfacquire.bpr

Ahora lo que está sucediendo es que el sistema de archivos HFS de Apple está poniendo las propiedades del archivo en los nombres ._ foobar para que puedan restaurarse en otro sistema Mac. Pero no los quiero --- son solo basura para mí. ¿Hay alguna forma de suprimirlos?

vy32
fuente
2
@geekosaur El usuario en unix.SE se rindió y aceptó una respuesta incorrecta.
Daniel Beck
También hay una pregunta relacionada SU pregunta sobre la extracción adecuada de ._*archivos de archivos (por ejemplo .__init__.py) que utiliza la misma solución.
Chris Johnsen

Respuestas:

69

Por respuesta a otra pregunta , puede configurar la variable de entorno no documentada (?) COPYFILE_DISABLE para evitar que varios de los programas suministrados por el sistema (incluido tar ) den un significado especial a los ._*miembros del archivo. En particular, les impedirá:

  • almacenar datos de atributos extendidos (incluidos los tenedores de recursos) en los ._*miembros del archivo
    (es decir, no "contaminen" archivos creados en Mac OS X pero destinados a ser utilizados en otros sistemas), y

  • intentar extraer atributos o recursos extendidos de los miembros del archivo nombrados como ._*
    (es decir, no malinterpretar los ._*miembros del archivo en archivos de otros sistemas).

El valor que utiliza para la variable de entorno no es importante (incluso puede ser la cadena vacía). Los valores tienen gusto 0, y falseno volverán a habilitar la característica. Lo único que importa es si la variable está configurada (debe "desarmarla" para volver a habilitar la función).

Puede usar esta variable en comandos individuales aprovechando la capacidad de los shells de estilo Bourne ( sh , ksh , bash , zsh , etc.) para prefijar comandos con variables de entorno adicionales.

COPYFILE_DISABLE=1 tar cf new.tar …

Si se encuentra con el problema la mayoría de las veces, es posible que desee establecer y exportar esta variable en uno de los archivos de inicialización de su shell.

# turn off special handling of ._* files in tar, etc.
COPYFILE_DISABLE=1; export COPYFILE_DISABLE

Cuando lo necesite, puede desarmar la variable para comandos individuales.

(unset COPYFILE_DISABLE; tar cf somefile.tar …)

En este sistema Mac OS X 10.6, los siguientes comandos parecen saber sobre COPYFILE_DISABLE:

  • /usr/bin/tar(un enlace simbólico a bsdtar)
  • /usr/bin/bsdtar
  • /usr/bin/gnutar
  • /bin/pax

COPYFILE_DISABLE se originó en Mac OS X 10.5. Si necesita admitir 10.4, tiene COPY_EXTENDED_ATTRIBUTES_DISABLE que funciona de la misma manera.

Chris Johnsen
fuente
GUAU. Justo lo que estaba buscando. Gracias. Mis archivos de autoconf serán mucho, mucho más limpios.
vy32
0

No es un experto, pero un poco de google encontró esto: http://www.ofzenandcomputing.com/zanswers/3422

y esto: http://hintsforums.macworld.com/archive/index.php/t-28703.html

Parece que el segundo comando podría incorporarse a un script ... es posible que no pueda evitar la creación de archivos fork de recursos, pero luego puede eliminarlos automáticamente.

editar: Debería haber mencionado que esto puede tener malos resultados, úselo bajo su propio riesgo.

CreeDorofl
fuente
1
El script elimina las bifurcaciones de recursos de los archivos en el disco local. Por lo general, tienen un propósito (como cambiar la aplicación asociada de un determinado archivo), por lo que esto debería venir con una gran advertencia.
Daniel Beck
El guión no me ayuda. Elimina los archivos del disco, no del archivo tar. Resulta que no tengo los archivos de recursos en mi disco. Pero se están poniendo en el archivo. Y a diferencia de los archivos zip, no puede simplemente eliminar archivos de un archivo tar.
vy32
(bah, tiempos de espera) En realidad, puede hacerlo si usa casi todo tarmenos el libarchivebasado en BSD (esto incluye Mac OS X), pero puede no ser confiable; Instalar GNU tar es a menudo una buena idea. (Sin embargo, es doloroso. Creo que debe enumerarlos todos y luego pasar esos nombres en la línea de comando). Además, los tenedores de recursos están técnicamente en el disco, pero en HFS + se almacenan en atributos extendidos; Los ._archivos son la forma en que OS X almacena los tenedores de recursos en lugares que no admiten atributos extendidos.
geekosaur
0

Puede intentar compilar el suyo taro instalarlo desde Macports o Fink si está disponible (Homebrew no lo tiene). Con algo de "suerte", debería ignorar los metadatos de OS X y omitir la creación de esos archivos.

Daniel Beck
fuente
Agradecería una explicación para el voto negativo. Gracias.
Daniel Beck