Tar une liste de fichiers qui n'existent pas tous


10

J'exécute une commande à partir d'un script comme

tar -c -f ar.tar a b c d

où b, c et d peuvent ne pas exister et peuvent être des répertoires. Les solutions que j'ai trouvées consistent à canaliser la sortie de ls -dvers grep, puis à la raccorder à la tarcommande, ou à activer des globes étendus pour @(a|b|c|d).

Y a-t-il une façon plus nette de procéder? Je suis sur Debian Wheezy, qui ne semble pas avoir de --includeparamètre.


Avez-vous une --ignore-failed-readoption?
Costas

1
J'ai essayé, j'ai quand même donné une erreur pour les fichiers qui n'existent pas du tout.
gidyn

1
Oui, un message d'erreur est présent mais l'archive est créée.
Costas

Réponses:


8

tu peux essayer

 tar cf ar.tar $(ls a b c d )

  • c pour créer
  • f ar.tar spécifier le fichier tar

  • $(ls a b c d) listera à stdin quels fichiers sont réellement présents (et donnera une erreur pour les autres)


2
tar cf ar.tar $(ls -d a b c d 2>/dev/null)fonctionne parfaitement .. mais je pense que c'est plus propre avec extglob
gidyn

maintenant je porte le script sur dash, donc non extglob- j'utilise le code dans mon commentaire ci
gidyn

1

S'il est correct d'avoir le chemin complet des fichiers dans l'archive tar, vous pouvez le faire:

tar -c -f ar.tar $(readlink -e a b c d)

L' -eoption de lien de lecture canonisera les noms de fichiers existants et ignorera silencieusement les autres.


Je suppose que cela pourrait fonctionner si je --strip-componentspendant l'extraction.
gidyn

0

Utilisation

find path/to/dir -name "*.ext1" -o -name "*.ext2"

Explication

  1. Le premier paramètre est le répertoire que vous souhaitez rechercher.
  2. Par défaut, la findrécursivité.
  3. Le -oreprésente -or. Donc ci-dessus signifie rechercher ce caractère générique OU celui-ci. Si vous n'avez qu'un seul motif, alors pas besoin -o.
  4. Les guillemets autour du motif générique sont obligatoires.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.