commande tar - ignorer les liens symboliques

13

J'utilise la commande tar comme,

tar -cvf protTests.tar protTests/*

à tartous les fichiers du dossier, protTests. Mais cela inclut les liens symboliques à l'intérieur du dossier, qui n'est pas souhaité.

Existe-t-il une option de ligne de commande qui supprimera tous les liens symboliques?

Gilles 'SO- arrête d'être méchant'
la source

Réponses:

11

Vous pouvez le faire, pour fournir tarune liste de tous les fichiers à l'intérieur protTestssauf ceux qui sont des liens symboliques:

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

Au fait, votre commande existante:

tar -cvf protTests.tar protTests/*

n'archivera pas tous les fichiers protTestsdedans, il archivera seulement ceux dont les noms ne commencent pas par .(ceux qui ne sont pas cachés). L' *opérateur glob ignore les fichiers dont les noms commencent .par leur conception. La commande a également le problème suivant: si elle protTestscontient de nombreux fichiers (plus de plusieurs milliers), elle protTests/*peut être étendue à trop d'arguments pour tenir sur la ligne de commande.

Une commande plus simple comme celle-ci n'aurait aucun de ces problèmes:

tar -cvf protTests.tar protTests
Celada
la source
1
Tar n'a pas d'option --files-from, c'est une option de gtar, donc si vous donnez un tel conseil, mieux vaut mentionner que c'est spécifique à gtar. La recherche n'a pas de primaire -not, c'est un autre GNUisme non portable. En général, c'est une mauvaise idée d'utiliser un appel de recherche distinct. Cela peut poser des problèmes avec des caractères amusants dans le nom de fichier et cela donne certainement de faibles performances car find et tar ont besoin d'analyser le système de fichiers. Ces problèmes ne s'appliquent pas aux programmes comme star qui utilisent libfind et ont donc le code find incorporé.
schily
Permettez-moi d'ajouter une autre indication générale: lorsque vous donnez un conseil spécifique à une variante spécifique à un fournisseur d'un programme UNIX, il est recommandé de mentionner le fournisseur et qu'il est spécifique au fournisseur. Cela peut généralement être fait en utilisant les noms officiels du logiciel, par exemple gtar au lieu de tar, vim au lieu de vi. Notez qu'il s'agit d'une plate-forme d'informations liées à UNIX, donc en général, les exemples doivent être alignés avec la norme POSIX.
schily
Vous avez raison, @schily, c'est une solution spécifique à GNU. Votre réponse basée sur starest une bonne alternative et je l'ai votée pour cette raison. Je suis également d'accord avec l'objection des "personnages drôles" mais comme GNU tarn'a pas d' -0option, c'est un compromis. Je ne suis pas d' accord avec l'objection de performance, cela n'a vraiment aucune conséquence dans cette situation.
Celada
2
@schily, à la fois GNU taret bsdtarhave --files-fromet --nullqui supprime le problème avec les personnages amusants (s'il est combiné avec find's -print0ou' -exec printf '%s\0' {} +). Mais ici, vous voudrez probablement ajouter l' --no-recursionoption. Certaines paximplémentations ont également une -0option.
Stéphane Chazelas
2
@schily Je pense que ce fil de commentaires n'est pas le lieu de plaidoyer pour différentes versions de tar. Veuillez le prendre pour discuter . C'est déjà beaucoup trop long et se lit comme une guerre de religion. À moins que l'OP ne retentisse à ce stade, je ne pense pas que la version de tarsoit utilisée soit importante. Nous ne savons même pas quel type d'Unix ils utilisent.
Celada
-2

Mon implémentation tar est la meilleure méthode

star -cv -f out.tar -find protTests ! -type l
schily
la source
8
zsh: command not found: starLorsque vous mentionnez des utilitaires que vous connaissez> 99% de vos lecteurs n'auront pas sur vos systèmes, expliquez où les obtenir. Et vous devez divulguer votre affiliation lorsque vous mentionnez votre propre produit (que vous publiez le lien ou non, vous pouvez donc aussi publier le lien).
Gilles 'SO- arrête d'être méchant'
Un système Linux typique manque de nos jours beaucoup de logiciels importants après une installation par défaut et en même temps, beaucoup de logiciels inutiles sont installés. Un utilisateur Linux doit savoir comment installer les logiciels manquants et les personnes qui utilisent fréquemment tar ont généralement installé star de toute façon.
schily
8
Une grande majorité de personnes qui utilisent fréquemment du goudron n'ont jamais entendu parler de pax, encore moins de star.
Gilles 'SO- arrête d'être méchant'
Eh bien, ces gens qui ne savent pas qu'ils utilisent gtar sous Linux lorsqu'ils appellent "tar" ne sont probablement pas ceux qui s'en soucient de toute façon. Star est la plus ancienne implémentation tar gratuite et de nombreuses fonctionnalités vues dans diverses implémentations tar ont été empruntées à star, alors pourquoi ne pas parler de l'original?
schily