comando tar - omitir enlaces simbólicos

13

Yo uso el comando tar como,

tar -cvf protTests.tar protTests/*

a tartodos los archivos dentro de la carpeta, protTests. Pero esto incluye los enlaces simbólicos dentro de la carpeta, que no es el deseado.

¿Existe una opción de línea de comando que omita todos los enlaces simbólicos?

Gilles 'SO- deja de ser malvado'
fuente

Respuestas:

11

Puede hacer esto, para proporcionar taruna lista de todos los archivos dentro, protTestsexcepto aquellos que son enlaces simbólicos:

find protTests -maxdepth 1 -mindepth 1 -not -type l -print0 |
  tar --null --files-from - -cvf protTests.tar

Por cierto, su comando existente:

tar -cvf protTests.tar protTests/*

no archivará todos los archivos protTests, solo archivará aquellos cuyos nombres no comiencen .(aquellos que no están ocultos). El *operador global omite archivos cuyos nombres comienzan .por diseño. El comando también tiene el problema de que si protTeststiene muchos archivos (más de muchos miles), protTests/*puede expandirse a demasiados argumentos para caber en la línea de comando.

Un comando más simple como este no tendría ninguno de esos problemas:

tar -cvf protTests.tar protTests
Celada
fuente
1
Tar no tiene opción --files-from, esta es una opción de gtar, por lo que de darles tal consejo, mejor mencionar que esto es específico de gtar. Find no tiene primario -not, este es otro GNUism no portátil. En general, es una mala idea usar una llamada de búsqueda separada. Esto puede dar problemas con los caracteres divertidos en el nombre del archivo y definitivamente da un bajo rendimiento ya que tanto find como tar necesitan escanear el sistema de archivos. Estos problemas no se aplican a programas como star que usan libfind y por lo tanto tienen incorporado el código de búsqueda.
schily
Permítanme agregar otra pista general: al dar un consejo que es específico para una variante específica del proveedor de un programa UNIX, es una buena práctica mencionar al proveedor y que es específico del proveedor. Esto normalmente se puede hacer utilizando los nombres oficiales del software, por ejemplo, gtar en lugar de tar, vim en lugar de vi. Tenga en cuenta que esta es una plataforma de información relacionada con UNIX, por lo que, en general, los ejemplos deben estar alineados con el estándar POSIX.
schily
Tienes razón, @schily, esta es una solución específica de GNU. Su respuesta basada en stares una buena alternativa y la he votado por esa razón. También estoy de acuerdo con la objeción de los "personajes divertidos", pero dado que GNU tarno tiene una -0opción, es una compensación. No estoy de acuerdo con la objeción de rendimiento, eso realmente no tiene consecuencias en esta situación.
Celada
2
@schily, tanto GNU tarcomo bsdtarhave --files-fromy --nullque elimina el problema con los personajes divertidos (si se combina con find's -print0o -exec printf '%s\0' {} +). Pero aquí, probablemente quieras agregar la --no-recursionopción. Algunas paximplementaciones también tienen una -0opción.
Stéphane Chazelas
2
@schily Siento que este hilo de comentarios no es el lugar para abogar por diferentes versiones de tar. Por favor tómalo para chatear . Ya es demasiado tiempo y se lee como una guerra religiosa. A menos que el OP suene en este punto, no creo que importe qué versión de taresté en uso. Ni siquiera sabemos qué tipo de Unix están usando.
Celada
-2

Mi implementación de tar es el mejor método

star -cv -f out.tar -find protTests ! -type l
astuto
fuente
8
zsh: command not found: starCuando mencione utilidades que sabe que> 99% de sus lectores no tendrán en sus sistemas, explique dónde obtenerlas. Y debe divulgar su afiliación cuando mencione su propio producto (ya sea que publique el enlace o no, por lo que podría publicar el enlace).
Gilles 'SO- deja de ser malvado'
Un sistema Linux típico en estos días pierde mucho software importante después de una instalación predeterminada y, al mismo tiempo, se instala una gran cantidad de software inútil. Un usuario de Linux debe saber cómo instalar el software que falta y las personas que usan tar con frecuencia suelen tener instalado Star de todos modos.
schily
8
La gran mayoría de las personas que usan alquitrán con frecuencia nunca han oído hablar de pax, y mucho menos protagonizar.
Gilles 'SO- deja de ser malvado'
Bueno, las personas que no saben que están usando gtar en Linux cuando llaman "tar" probablemente no son las personas que se preocupan de todos modos. Star es la implementación de tar gratuita más antigua y muchas características que se ven en varias implementaciones de tar se han tomado de star, así que ¿por qué no hablar sobre el original?
schily