Script unix sh

bonjour

je souhaite écrire un script sh pour déplacer des fichiers dans un répertoire X. Ces fichiers doivent être renommés lors de ce déplacement sur la base du nom du fichier. Le nom du fichier originel est contruit sous la forme :

NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier.pdf

Il est dans un répertoire commun et chacune des ficheirs encore présent dans ce répertoire doivent être renommer et déplacer dans l'arborescence suivante

NomduNiveau1\NomduNiveau2\NomduNiveau3\NomDufichier.pdf

si les répertoires n'existent pas, il faudrait qu'ils soient créée.
Configuration: Mac OS X
Firefox 2.0.0.1

4 réponses

  1. Modérateur
    Salut,

    Tiens déjà pour ton premier problème :
    var="NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier.pdf"
    
    echo ${var##*_}
    
    NomDufichier.pdf
    ;-))
    0
    1. merci
      comment récupérer chacun des mots entre _ et initialiser autant de variables ?
      0
  2. Modérateur
    Re-

    Voilà un exemple non optimisé (il y a surement moyen de faire plus concis) :
    [jp@MDK tmpfs]$ cat essai.sh
    
    #! /bin/bash
    
    var="NomduNiveau1_NomduNiveau2_NomduNiveau3_NomduNiveau4_NomDufichier.pdf"
    count=1
    
    set $(echo ${var%_*}| tr '_' ' ') && echo $* | tr -s ' ' '\n' > tmp.txt
    while read param
    do
    set niveau"$count"="$param"
    echo niveau"$count"="$param"
    count=$(expr $count + 1)
    done < tmp.txt
    rm -f tmp.txt
    
    [jp@MDK tmpfs]$ sh essai.sh
    
    niveau1=NomduNiveau1
    niveau2=NomduNiveau2
    niveau3=NomduNiveau3
    niveau4=NomduNiveau4
    
    [jp@MDK tmpfs]$
    ;-))
    0
    1. Merci pour cette proposition. Je vois l'idée donnée.
      Reste à l'intégrer dans mon script qui traite tous les fichiers dans un réperoire et les redispatche dans l'arborescence adhoc (création éventuelle).

      :D
      0
      1. Modérateur
        Re-
        [jp@MDK tmpfs]$ cat essai.sh
        
        #! /bin/bash
        
        cd /home/jp/tmpfs/
        
        for fich in *
        do
        name=$(echo ${fich##*_})
        rep=$(echo ${fich%_*}| tr '_' '/')
        mkdir -p "$rep" 2>/dev/null
        cp "$fich" "$rep/$name" 2>/dev/null
        done
        
        [jp@MDK tmpfs]$ ls -1
        
        NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier1.pdf
        NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier2.pdf
        NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier3.pdf
        NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier4.pdf
        NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier5.pdf
        NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier6.pdf
        
        [jp@MDK tmpfs]$ sh essai.sh && ls -R 
        
        .:
        NomduNiveau1/
        NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier1.pdf
        NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier2.pdf
        NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier3.pdf
        NomduNiveau4/
        NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier4.pdf
        NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier5.pdf
        NomduNiveau4_NomduNiveau5_NomduNiveau6_NomDufichier6.pdf
        
        ./NomduNiveau1:
        NomduNiveau2/
        
        ./NomduNiveau1/NomduNiveau2:
        NomduNiveau3/
        
        ./NomduNiveau1/NomduNiveau2/NomduNiveau3:
        NomDufichier1.pdf
        NomDufichier2.pdf
        NomDufichier3.pdf
        
        ./NomduNiveau4:
        NomduNiveau5/
        
        ./NomduNiveau4/NomduNiveau5:
        NomduNiveau6/
        
        ./NomduNiveau4/NomduNiveau5/NomduNiveau6:
        NomDufichier4.pdf
        NomDufichier5.pdf
        NomDufichier6.pdf
        
        [jp@MDK tmpfs]$
        ;-))
        0