Retourner aux forums || Retourner au forum Programmation.shell
Pour déterminer le format du fichier passer en argument d'un script, j'utilise : file $monfic | grep $monformat
Le probleme est qu'il s'agit d'archives j'ai donc comme format zip gzip et bzip2...
tout me sort en zip :(
J'ai essayé avec file $monfic | grep \<$monformat\> et la ça marche plus (else echo -e "impossible de déterminer le type de $monfic\n")
Question 1 : comment faire pour éviter la confusion entre ces chaînes ?
Question 2 : Y a-t-il un meilleur moyen de connaître le format du fichier ?
Merci
> Lire le message (8 commentaires, moyenne: 1,9).
et avec des espaces ?
Il suffit de faire un grep sur la chaîne recherchée entourée d'espaces pour reconnaître uniquement ce mot et ça devrait marcher.
file $monfic | grep -i " $monformat "
-
[^]Re: et avec des espaces ?
Posté par Raphaël Fairise () le 07/08/2004 à 09:36. (lien). Évalué à 1.Bon, en fait, il y a une erreur car le nom du fichier est dans la sortie de "file" et est reconnu par le grep.
Je ferais plutôt quelque chose comme ça :
file -b $monfic | grep -i "^$monformat"-
[^]Re: et avec des espaces ?
Posté par Christophe Chailloleau-Leclerc (Jabber id, page perso, ) le 07/08/2004 à 17:53. (lien). Évalué à 2.Hello,
je ne sais pas comment est la sortie de file, et je n'ai pas de manchot sous la main pour tester, mais si le format est le seul mot sur la ligne, je complèterai avec un $ à la fin de la chaîne du grep, afin de ne pas prendre les mots commencant par $monformat.
Le ^ en début de chaîne prévient bien les gzip et bzip pour zip, mais pas des ziptoto ou zipx si ceux-là existent (bien entendu, l'exemple est foireux ;-) ).
file -b $monfic | grep -i"^$monformat\$"
Bonne chance.
-
test
test `file -b $monfic | cut -f1 -d' '` = $monformat
option --brief
Tu devrais utiliser aussi l'option « brief » de file pour eviter qu'il renvoit le nom du fichier:
file -b $monfic | grep "\<$monformat\>"
Sinon moi j'utiliserai plutot awk:
FORMAT=$(file -b $monfic | awk '{print $1 }')
case FORMAT in
zip) ... ;
gzip) ... ;
bzip2) ... ;
...) ... ;
esac
-
[^]Re: option --brief
-
[^]Re: option --brief
Posté par d-jo (page perso, ) le 10/08/2004 à 12:17. (lien). Évalué à 2.Merci à tous pour vos réponses. C'est agréable de pouvoir communiquer ainsi.
Je vais utiliser le truc de gnujsa avec awk. Si j'ai bien compris (car j'essaye de comprendre ce que je fais et je ne connais pas awk) $1 représente le premier mot de la sortie de file ($2 le second...).
Cela me donne d'emblée la chaîne que je recherche et sera plus pratique pour introduire d'autres cas.
A++-
[^]Re: option --brief
Posté par gnujsa () le 16/08/2004 à 01:58. (lien). Évalué à 2.awk va découper ce qu'il reçoit en champs ( comme les colones d'un tableau ). Par défaut les champs sont délimités par un espace ou une tabulation. Ça corespond donc à un mot. Ça se change avec l'option -F. $1 corespondent au premier champ, $2 au deuxième, etc ... ( rien à voir avec les variables du shell, et c'est pour ça qu'il faut les « protéger » à l'aide des guillemets simples )
echo 'UID'
cat /etc/passwd | awk -F: '{ print $3}'
une petite introduction à awk:
http://www.shellunix.com/awk.html(...)
-
-
Revenir en haut de page || Retourner aux forums || Retourner au forum Programmation.shell



Cette discussion est archivée, il n'est plus possible de laisser des commentaires.
Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.