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 -d
vers grep
, puis à la raccorder à la tar
commande, 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 --include
paramètre.
--ignore-failed-read
option?Réponses:
tu peux essayer
où
c
pour créerf 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)la source
tar cf ar.tar $(ls -d a b c d 2>/dev/null)
fonctionne parfaitement .. mais je pense que c'est plus propre avec extglobextglob
- j'utilise le code dans mon commentaire ciS'il est correct d'avoir le chemin complet des fichiers dans l'archive tar, vous pouvez le faire:
L'
-e
option de lien de lecture canonisera les noms de fichiers existants et ignorera silencieusement les autres.la source
--strip-components
pendant l'extraction.Utilisation
Explication
find
récursivité.-o
repré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
.la source