Crear archivo con archivos y carpetas ocultos crea un archivo . entrada raíz

Crear archivo con archivos y carpetas ocultos crea un archivo . entrada raíz

Estoy intentando archivar una carpeta de proyecto con archivos y carpetas ocultos, y obtengo uno con una entrada raíz de .. Es molesto. Normalmente:

tar -czf $ARCHIVE_NAME -C $DIR .

creará un archivo como

./package.json
./.git
./.gitignore
.
.
.

donde me gustaría que la raíz del archivo fueran los archivos y carpetas reales, sin tener una .entrada. Como

package.json
.git
.gitignore
.
.
.

¿Cómo puedo hacer eso?

* Editar *

La siguiente imagen puede ser útil para aclarar esta pregunta.

  • A la izquierda, un archivo creado con la herramienta GUI del proyecto (de hace dos días).
  • A la derecha, un archivo creado con el tarcomando anterior.

Observe la barra "Ubicación"; el archivo de la derecha debería ser /, yno /./.

ingrese la descripción de la imagen aquí

Respuesta1

./significa el directorio actual. Sus dos listados son idénticos.

Tener ./el archivo delante al enumerar el archivo ayuda a manejar archivos con un nombre especial. -fileSe mostrará un nombre de archivo que ./-filepermite que una segunda herramienta lo procese.

Respuesta2

Cambiando tu comando de

tar -czf $ARCHIVE_NAME -C $DIR .

a

tar -czf $ARCHIVE_NAME -C $DIR ./*

debería funcionar. De esta manera, no estará diciendo "Agregar el directorio .al archivo" sino "Agregar todos estos archivos en el directorio .al archivo".

Respuesta3

Este comando tar los archivos en el directorio actual sin el encabezado ./:

tar cf /some/tarfile.tar *

Por supuesto, no incluirá nombres de archivos que comiencen con un punto, que probablemente no sea lo que desea. Puede agregar comodines adicionales para capturarlos:

tar cf /some/tarfile.tar * .[a-zA-Z]*

Pero ésta no es una solución de propósito general; debe saber qué nombres de archivos hay en el directorio para poder crear los comodines apropiados.

GNU tar, que es lo que usan la mayoría de las distribuciones de Linux, tiene una función para transformar nombres de archivos usando sedexpresiones. Esto eliminará los ./archivos mientras se crea el archivo:

tar cf /some/tarfile.tar --transform 's,^\./,,' .

El archivo resultante todavía tendrá una entrada para "." directorio mismo.

Algunas versiones de tarpueden leer los nombres de los archivos que se van a tar de un archivo. Puedes explotar esa característica para hacer esto:

ls -a | egrep -v '^\.\.?$' | tar cf - -T /dev/stdin

Esta canalización construye una lista de todos los archivos en el directorio actual, elimina las entradas .y ..y canaliza el resto de los nombres a tar. tar crea el archivo a partir de los nombres de archivo leídos /dev/stdin(su entrada estándar).

información relacionada