Distinguer l'extension du nom d'un fichier

Résolu
tbeghain Messages postés 63 Statut Membre -  
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   -
Bonjour,

Sur AIX, dans un script shell, j'ai une variable qui contient un nom de fichier (exemple monfic.txt). Comment, à partir de cette variable, puis-je obtenir deux variables, une contenant le nom (monfic), et l'autre l'extension (txt) ?

Merci pour vos réponses

5 réponses

  1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,
    [jp@MDK tmpfs]$ var="commentcamarche.net"
    
    [jp@MDK tmpfs]$ echo ${var%.*}
    commentcamarche
    
    [jp@MDK tmpfs]$ echo ${var#*.}
    net
    
    [jp@MDK tmpfs]$
    ;-))
    1
    1. tbeghain Messages postés 63 Statut Membre 3
       
      Merci beaucoup, ça marche impec
      0
      1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898 > tbeghain Messages postés 63 Statut Membre
         
        De rien, c'est fait pour ;-))
        0
  2. Laurent
     
    lu

    Je ne fais pas de script shell.. mais je dirais que tu peux couper la variable en 2 par rapport au . (point)

    et ainsi avoir le nom et l'extension séparé.
    0
    1. tbeghain Messages postés 63 Statut Membre 3
       
      Merci, c'est précisemment ce que je cherche à faire, mais comment le faire ?
      0
  3. sbouli Messages postés 208 Statut Membre 2
     
    Bonjour,

    Je rebondi sur ce post, car mes noms de fichier comporte plusieurs points, comment préciser de prendre en compte le dernier ?

    exemple de nom :

    mail.log.0.10.gz

    l'autre option serait de récupérer le nom du fichier une fois décompressé par gunzip ... mais je n'ai pas trouvé de moyen ...

    Merci d'avance.

    Stéphane
    0
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    Salut,

    essaie (je n'ai pas testé)
    echo ${var%%.*}
    echo ${var##*.}
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. sbouli Messages postés 208 Statut Membre 2
     
    bonjour,

    ni l'un ni l'autre, voici la sortie :

    mail
    gz

    Merci
    0
    1. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
       
      Salut,

      Tu veux obtenir quoi au final ???
      [root@servertest trash]# echo ${var}
      mail.log.0.10.gz
      [root@servertest trash]# echo ${var%.*}
      mail.log.0.10
      [root@servertest trash]# echo ${var%%.*}
      mail
      [root@servertest trash]# echo ${var#*.}
      log.0.10.gz
      [root@servertest trash]# echo ${var##*.}
      gz
      [root@servertest trash]#
      ;-))
      0
    2. sbouli Messages postés 208 Statut Membre 2 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      fabuleux ces expressions régulières ... faudrais vraiment que j'arrive à accrocher un jour ... même après avoir passé des jours sur AWK puis en perl, je n'arrive toujours pas à prendre le truc ...
      j'aurais dû essayer la première solution en dur, je me suis directement dis, oui donc % c'est le joker jusqu'a premier point et ça renvoi le reste .... or il n'en n'est rien ... utilise ta tête et essais stéphane ....

      Merci encore à tout les 2.

      Stéphane
      0
    3. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      Là, le plus rapide semble être l'uitilisation de SED:
      c2d:~ adrien$ echo $VAR |sed 's/\(.*\)\.\(.*\)/file: \1 ext: \2/'
      file: mail.log.0.10 ext: gz
      Il y a d'autres solutions mais qui vont nécéssiter beaucoup de commandes.

      ex: aficher la variable a l'envers, couper le champ 1 le renverser et tu as l'extension
      substituer l'extension trouvée en 1 par rien dans la variable.
      c2d:~ adrien$ ext=$(echo $VAR|rev |cut -f1 -d'.' | rev)
      c2d:~ adrien$ echo $ext
      gz
      c2d:~ adrien$ file=${VAR/.$ext/} 
      c2d:~ adrien$ echo $file 
      mail.log.0.10
      c2d:~ adrien$ 
      0
    4. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
       
      Arf, et moi, j'ai pas cherché non-plus, je me suis dis, s'il dit que ça ne marche pas, c'est que ça ne marche pas :(
      0
    5. sbouli Messages postés 208 Statut Membre 2 > asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention  
       
      euuu hein ????? la réponse de jipicy est nickel ... comme toujours ....

      Stéphane
      0