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
    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]$
    ;-))
    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
      1. 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]$
        ;-))
        1. Modérateur
          Salut,

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