Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1218 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Problème avec tar dans un script

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec tar dans un script

n°1303250
MagicBuzz
Posté le 01-02-2012 à 18:07:27  profilanswer
 

Bonjour,
 
J'ai un script qui, dans un traitement, doit mettre tous les fichier "ced*met.las*" et "ced*exp.las*" dans un fichier tar.
 
J'ai cherché sur le net comment faire un "ou" avec ls, mais je n'ai pas trouvé.
 
J'ai trouvé qu'on pouvait utiliser *, ? et [] mais pas de notion de ou logique.
 
Qu'à cela ne tienne, j'ai fais deux instructions :
 

Code :
  1. ls ced*met.las* 2>/dev/null
  2. if [ $? = 0 ]
  3. then
  4. # compression des fichiers editions
  5. echo "compression des fichiers MET" >> $fichier
  6. tar cvf ${NOM_FICINT} ced*met.las* >> $fichier 2>&1
  7. fi
  8. ls ced*exp.las* 2>/dev/null
  9. if [ $? = 0 ]
  10. then
  11. # compression des fichiers editions
  12. echo "compression des fichiers EXP" >> $fichier
  13. tar cvf ${NOM_FICINT} ced*exp.las* >> $fichier 2>&1
  14. fi


Mais le code ci-dessus écrase le tar créé dans le permier if (d'ailleurs, pas bien pigé, car il ne l'écrase pas complètement, il reste un des fichiers dedans mais bon).
 
Qu'à cela ne tienne, il suffit que je lance avec Avf la première fois, puis cvf la seconde...
 
Sauf que j'ai un problème : il n'y a pas forcément toujours de fichier "ced*met.las*" ou "ced*exp.las*"
 
Comment :
- Faire un "ls ced*(met|exp).las* 2>/dev/null
- ou bien comment dire à tar de créer ou ajouter de façon automatique selon existence du fichier
 
J'ai tenté de mettre Avf à chaque fois, mais le fichier généré est alors invalide, et je peux plus le untar.

mood
Publicité
Posté le 01-02-2012 à 18:07:27  profilanswer
 

n°1303258
ccp6128
Syntax error
Posté le 01-02-2012 à 19:49:52  profilanswer
 

Salut Magic.
 
Tu sais que tu n'es pas obligé de faire plusieurs commandes distinctes ?
 
Ton script pourrait être résumé en :
 

Code :
  1. ls ced*met.las*  ced*exp.las*  2>/dev/null
  2.     if [ $? = 0 ]
  3.     then
  4.     # compression des fichiers editions
  5.     echo "compression des fichiers MET" >> $fichier
  6.     tar cvf ${NOM_FICINT} ced*met.las* ced*exp.las* >> $fichier 2>&1
  7.     fi

n°1303268
sputnick
bip...bip...bip...bip...bi...b
Posté le 01-02-2012 à 21:03:22  profilanswer
 

Houla que c'est moche !
 
:D
 

Code :
  1. #!/bin/bash
  2. fichier=/tmp/log
  3. shopt -s nullglob
  4. if [[ $(compgen -W ced*met.las*) ]]; then
  5.     # compression des fichiers editions
  6.     echo "compression des fichiers MET" >> $fichier
  7.     tar cvf ${NOM_FICINT} ced*met.las* >> $fichier 2>&1
  8. elif [[ $(compgen -W ced*exp.las*) ]]; then
  9.     # compression des fichiers editions
  10.     echo "compression des fichiers EXP" >> $fichier
  11.     tar cvf ${NOM_FICINT} ced*exp.las* >> $fichier 2>&1
  12. else
  13.     echo >&2 "Aucun fichiers 'ced*met.las*' ou  'ced*exp.las*'"
  14. fi

n°1303275
ccp6128
Syntax error
Posté le 01-02-2012 à 21:41:45  profilanswer
 

J'ai l'impression que ton script met les fichier MET OU les fichiers EXP, ce qui n'est pas ce que Magic cherche a priori.
 
Et il n'a pas précisé si il faisait du bash ou pas (mais bien bel usage du bash de ta part, j'avoue :) )

n°1303290
sputnick
bip...bip...bip...bip...bi...b
Posté le 01-02-2012 à 23:33:48  profilanswer
 

Oui, tout à fait. Mais la demande est pas claire, je lis :  
 

Citation :

J'ai cherché sur le net comment faire un "ou" avec ls, mais je n'ai pas trouvé.


 
MagicBuzz si tu nous entends :D

n°1303323
MagicBuzz
Posté le 02-02-2012 à 09:38:10  profilanswer
 

Bonjour, et merci pour votre réponse très rapide !
 
ccp6128 a bien compris ma demande, c'est un OU logique, donc inclusif que je cherche à reproduire.
 
Donc je veux soit l'un, soit l'autre, soit les deux, selon si l'un, l'autre ou les deux sont présents :)
 
La solution de ccp6128 semble correspondre parfaitement à mon attente.
 
Etant donné que :
1/ j'y connais pas grand chose en script (pas plus qu'à Linux en fait ^^)
2/ que je modifie le script écrit par une autre personne
3/ que cette personne s'y connait pas beaucoup plus que moi
4/ et qu'elle déteste que j'ajoute de nouvelles choses qu'elle ne maîtrise pas
=> je vais donc garder la syntaxe proposée par ccp6128, qui est similaire à l'originale, contrairement à celle de sputnick qui fait appel à des fonctions que je n'ai jamais vu dans les scripts de ma collègue ("shopt -s nullglob" et "compgen" ) et que je ne saurai pas justifier ou corriger en cas de régression ;)

n°1303424
MagicBuzz
Posté le 02-02-2012 à 20:08:44  profilanswer
 

Bonjour,
 
J'ai essayé le script de ccp6128, et ça ne semble pas fonctionner.
 
Je n'ai que des fichiers ced*exp* et pas de fichiers ced*met*, et aucun tar n'a été créé.
 
A noter que je suis en script KSH et non BASH.

n°1304051
Nukolau
Posté le 08-02-2012 à 17:31:58  profilanswer
 

Hum ...
 
Pour quoi pas tout simplement :
 

Code :
  1. [ $(ls ced*met.las*  ced*exp.las*  | wc -l) -gt 0 ] && tar cf fichier.tar ced*met.las*  ced*exp.las*

n°1304336
e_esprit
Posté le 11-02-2012 à 10:54:35  profilanswer
 

Je sais pas pour ksh, mais en bash tu peux faire ça :

 

ls ced*{met,exp}.las*

 

Du coup avec tar c'est faisable aussi, puisque c'est le bash qui fait l'evaluation de l'expression régulière :

tar -cf toto.tar ced*{met,exp}.las*


Ca me parait plus simple et plus lisible quand même :o


Message édité par e_esprit le 11-02-2012 à 10:55:31

---------------
Ce n'est point ma façon de penser qui a fait mon malheur, c'est celle des autres.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Problème avec tar dans un script

 

Sujets relatifs
Script shell problème avec date[FREEBSD] - Problème exécution script
Problème d'exécution script bashProblème metacaratère dans un script...
Script bash + iptables = probleme incomprehensibleprobleme script client OCS INVENTORY
[Pas résolu !] Problème de script Bash dans script PerlProblème de script bash sous Cygwin
Problème avec crontab (pas d'execution du script)Problème script Linux
Plus de sujets relatifs à : Problème avec tar dans un script


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR