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

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  [BASH] Ajouter extension via feedback de commande file

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[BASH] Ajouter extension via feedback de commande file

n°886428
belzme
Hertz ou ne pas hertz...
Posté le 14-02-2007 à 04:38:08  profilanswer
 

Bonjour,

 

Je suis encore bloqué dans mon TP d'université (intro unix).  Je ne vous demande pas de faire le problème à ma place, cependant j'avoue avoir bcp de mal avec ce TP car j'ai subis une chirgurgie dernièrement et je n'ai pas pu assister aux cours théoriques.

 
Citation :


5- (45 points)
Faites un script en Shell du nom de typefiledir avec un nombre variable de paramètres qui sont
des répertoires existants dans le répertoire courant. Pour chacun des répertoires nommés, votre
script doit vérifier (avec le programme file) chacun des fichiers, et s%u2019il trouve des fichiers dont le
type est dans la liste suivante, il doit ajouter le suffixe correspondant au nom de fichier (on
suppose que les fichiers n%u2019ont pas encore de suffixe) ou effectuer l%u2019action qui est indiquée. Si les
répertoires contiennent des sous-répertoires, votre script n%u2019a pas à parcourir ces sous-répertoires
mais simplement ajouter le suffixe .dir après le nom du répertoire.

 

Voici la liste des types de fichiers à identifier et leurs actions ou suffixes à ajouter au nom de
fichier : Bourne-Again shell (suffixe .sh), tar (suffixe .tar), zip (suffixe .zip), ASCII text (suffixe
.txt), JPEG (suffixe .jpg), PDF (suffixe .pdf), PostScript (suffixe .ps), code HTML (suffixe
.html), format compress (action de uncompress sur le fichier), gzip (action de gunzip sur le
fichier)

 

Je n'ai aucun problème avec les paramètres et j'ai déja mon "case" de fait pour effectuer les actions celon le type de fichier.

 

Parcontre, je bloque au niveau de la commande file.  Comment puis-je transférer le contenu de la commande file * dans une variable et boucler sur chacune des valeur par la suite ?

 

Dans un autre language de prog, j'aurais créer une "map" qui aurait contenu le nom du fichier et la réponse de file dans l'autre afin de boucler sur chacune des combinaison clé/valeur de la map, mais la j'ai aucune idée comment arrivé au même résultat en bash... HELP please

 

UPDATE: Au cas ou ça ferait partie de vos suggestions, je ne pense pas avoir le droit d'utiliser AWK.

 

Merci !!


Message édité par belzme le 14-02-2007 à 04:43:50
mood
Publicité
Posté le 14-02-2007 à 04:38:08  profilanswer
 

n°886435
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 14-02-2007 à 05:49:56  profilanswer
 

$* est ton ami pour la première question :o


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°886439
belzme
Hertz ou ne pas hertz...
Posté le 14-02-2007 à 06:50:13  profilanswer
 

Merci, cependant je n'ai pas de problème pour cette partie de la question puisque j'ai déjà fait le code qui boucle sur les paramètres de l'utilisateur.  Aurais-tu une piste de solution pour la partie qui m'embête ?
 

n°886455
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 14-02-2007 à 09:32:31  profilanswer
 

a=$* [:pingouino]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°886549
belzme
Hertz ou ne pas hertz...
Posté le 14-02-2007 à 14:24:17  profilanswer
 

$* contient tous les paramètres passé au script non ?
 
Donc si j'appel toto.sh param1 param2, le contenu de $* sera param1 param2 exact ?
 
Parcontre, si j'exécute une commande tel que file, le resultat de cette commande sera automatiquement ajouté à $* sans intervention de ma part ?
 
Désolé d'être lourd mais je ne comprend pas :*(

Message cité 1 fois
Message édité par belzme le 14-02-2007 à 14:24:54
n°886554
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 14-02-2007 à 14:32:11  profilanswer
 

belzme a écrit :

$* contient tous les paramètres passé au script non ?
 
Donc si j'appel toto.sh param1 param2, le contenu de $* sera param1 param2 exact ?
 
oui
 
Parcontre, si j'exécute une commande tel que file, le resultat de cette commande sera automatiquement ajouté à $* sans intervention de ma part ?
 
ça n'a pas de sens ce que tu dis
 



---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°886559
belzme
Hertz ou ne pas hertz...
Posté le 14-02-2007 à 14:43:20  profilanswer
 

Bon dans ce cas, je crois que c'est ma première question qui n'étais pas clair.
 
Mon problème, est que dans mon script, si J'exécute file *, la commande imprime ceci à l'écran :
 
test.sh  :   Bourne-Again shell script
test.pdf :   PDF document blablabla
 
Je voudrais donc stocker ce résultat dans une variable pour pouvoir "boucler" dessus.
 
Donc en gros j'ai une question : comment stocké ce résultat dans une variable ou dans une "map" où nomdufichier/type serait la clé/valeur.
 

n°886561
black_lord
Modérateur
Truth speaks from peacefulness
Posté le 14-02-2007 à 14:49:45  profilanswer
 

http://www.google.fr/search?hl=fr& [...] ogle&meta= -> http://en.wikipedia.org/wiki/Assoc [...] .2C_....29
 
[:spamafote]


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
n°886584
Xavier_OM
Monarchiste régicide (fr quoi)
Posté le 14-02-2007 à 15:43:34  profilanswer
 

Faites un script en Shell du nom de typefiledir avec un nombre variable de paramètres qui sont
des répertoires existants dans le répertoire courant

 

=> dans ton script $@ représente tous les arguments, donc ici tous les répertoires, de $1 à $n.
=> "shift" décrémente tous les indices, $1 est perdu, $2 devient $1, $3 devient $2... $n devient $n-1
=> tu peux donc en bouclant sur shift et en consultant $1 accéder à tous les arguments, un par un

. Pour chacun des répertoires nommés, votre
script doit vérifier (avec le programme file) chacun des fichiers

 

=> tu peux utiliser find -type f DIR pour sortir tous les fichiers du répertoire. Si tu ne veux pas de récursion, on peut limiter la profondeur de find avec -mindepth et -maxdepth

 

, et s%u2019il trouve des fichiers dont le
type est dans la liste suivante, il doit ajouter le suffixe correspondant au nom de fichier (on
suppose que les fichiers n%u2019ont pas encore de suffixe) ou effectuer l%u2019action qui est indiquée.

 

=> file -b et mv devrait suffire

 

Si les
répertoires contiennent des sous-répertoires, votre script n%u2019a pas à parcourir ces sous-répertoires
mais simplement ajouter le suffixe .dir après le nom du répertoire.

 
=> le sujet se contredit, c'était écrit qu'on devait vérifier chacun des fichiers, mais bon... Pour les répertoires, un find -type d suffira

 

Voici la liste des types de fichiers à identifier et leurs actions ou suffixes à ajouter au nom de
fichier : Bourne-Again shell (suffixe .sh), tar (suffixe .tar), zip (suffixe .zip), ASCII text (suffixe
.txt), JPEG (suffixe .jpg), PDF (suffixe .pdf), PostScript (suffixe .ps), code HTML (suffixe
.html), format compress (action de uncompress sur le fichier), gzip (action de gunzip sur le
fichier)

  


Pour ton histoire d'itérer sur la sortie de file *, tu devrais plutôt itérér sur les fichiers et appeler find sur chacun d'entre eux  [:spamafote]
Si vraiment tu tiens à ton file *, on peut imaginer un

   file * | while read toto; do                          # parcours des lignes une par une
        gauche="`echo "$toto" | cut -d ':' -f 1`"     # coupe la ligne sur :, garde le premier champ
        droite="`echo "$toto" | cut -d ':' -f 2`"       # idem mais champ 2
        echo "Le fichier $gauche est de type $droite"
    done


Message édité par Xavier_OM le 14-02-2007 à 17:27:54

---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
n°886693
belzme
Hertz ou ne pas hertz...
Posté le 14-02-2007 à 20:34:38  profilanswer
 

Merci à vous deux :)
 
Je viens tout juste de terminer mon script.  Pour info, j'ai utiliser for i in $* au lieu de shift.
 
J'ai également adopté la solution file nomdudossier/* qui est plus simple pour moi.
 


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

  [BASH] Ajouter extension via feedback de commande file

 

Sujets relatifs
[BASH] question sur un bout de script(BASH) Découper $path en plusieurs variables (debutant)
NFS : "Stale NFS file handle" suite a plantageLister les disques durs du PC par une ligne de commande.
ajouter des fichier a un répertoireLancer une commande au démarrage de Linux
commande pout faire la liste des /dev/[Commande] sauvegarder config réseau
Extraire les mails de la file d'exim pour un utilisateur donné 
Plus de sujets relatifs à : [BASH] Ajouter extension via feedback de commande file


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