Quiero crear un archivo tar de un directorio específico (con sus subdirectorios, por supuesto). Pero cuando lo hago, usando el comando tar, obtengo una lista de archivos que se incluyeron, por ejemplo:
un calendar_final /._ style.css
un calendar_final / style.css
Como puede ver, hay dos versiones del mismo archivo. Esto va para cada archivo, y hay muchos. ¿Cómo excluyo los archivos temporales, con el prefijo ._, del archivo tar?
Respuestas:
Publicaste en un comentario que estás trabajando en un sistema Mac OS X. Esta es una pista importante para el propósito de estos
._*
archivos.Estas
._*
entradas de archivo son fragmentos de datos AppleDouble que contienen la información adicional asociada con el archivo correspondiente (el que no tiene el._
prefijo). Son generados por la familia de funciones del copyfile específico de Mac OS X (3) . Los blobs de AppleDouble almacenan datos de control de acceso (ACL) y atributos extendidos (comúnmente, indicadores de Finder y "bifurcaciones de recursos", pero xattrs se pueden usar para almacenar cualquier tipo de datos).Las herramientas de archivo de Mac OS X suministradas por el sistema (
bsdtar
(también enlazadas simbólicamente comotar
),gnutar
ypax
) generarán un._*
miembro de archivo para cualquier archivo que tenga información extendida asociada; en modo "desarchivar", también decodificarán a los miembros del archivo y aplicarán la información extendida resultante al archivo asociado. Esto crea un archivo de "fidelidad total" para usar en sistemas Mac OS X al preservar y luego extraer toda la información que el sistema de archivos HFS + puede almacenar.Las herramientas de archivo correspondientes en otros sistemas no saben dar un manejo especial a estos
._*
archivos, por lo que se desempaquetan como archivos normales. Dado que dichos archivos son bastante inútiles en otros sistemas, a menudo se consideran "archivos basura". En consecuencia, si un sistema que no es Mac OS X genera un archivo que incluye archivos normales que comienzan con._
, las herramientas de desarchivado de Mac OS X intentarán decodificar esos archivos como información extendida.Sin embargo, existe una forma no documentada (?) De hacer que los archivadores Mac OS X suministrados por el sistema se comporten como lo hacen en otros sistemas Unixy: la variable de entorno COPYFILE_DISABLE. Establecer esta variable (en cualquier valor, incluso la cadena vacía), evitará que los archivadores generen
._*
miembros de archivo para representar cualquier información extendida asociada con los archivos archivados. Su presencia también evitará que los archiveros intenten interpretar tales miembros del archivo como información extendida.Puede configurar esta variable en el archivo de inicialización de su shell si desea trabajar de esta manera la mayoría de las veces.
Luego, cuando necesite volver a habilitar la función (para preservar / restaurar la información extendida), puede "desarmar" la variable para comandos individuales:
Los archivadores en Mac OS X 10.4 también hacen algo similar, aunque usan una variable de entorno diferente: COPY_EXTENDED_ATTRIBUTES_DISABLE
fuente
Esto debería funcionar:
fuente
tar --version
da GNU 1.23 aquí.tar vzcf ...
para ver si se incluyeron archivos incorrectos.Frederik Deweerdt ha dado una solución que funciona en GNU tar (utilizada en Linux, Cygwin, FreeBSD, OSX, posiblemente otros), pero no en otros sistemas como NetBSD, OpenBSD o Solaris.
POSIX no especifica el
tar
comando (porque varía demasiado entre las variantes de Unix) e introduce elpax
comando en su lugar. La opción-w
significa producir un archivo (-r
extractos) y-x
selecciona el formato de archivo. La opción-s '!BRE!!'
excluye todos los archivos cuya ruta coincide con la expresión regular básica BRE.fuente
A partir de
bsdtar 3.0.3 - libarchive 3.0.3
(y quizás antes) hay una nueva opción (específica de Mac OS X) para elbsdtar
comando llamado--disable-copyfile
para suprimir la creación de._
archivos. Las versiones anteriores detar
no tienen la--disable-copyfile
opción, pero la configuración de la variable de entornoCOPYFILE_DISABLE=1
debería funcionar.fuente
bsdtar 2.8.3 - libarchive 2.8.3
de10.7.5
la--disable-copyfile
que no se documenta pero está disponible, no obstante.Sigue estos pasos:
Busque todos los
._
archivos y enumérelos usando-ls
para poder ver todos los._
archivos y finalmente eliminarlos.Crear archivo .tar usando.
fuente