Script unix sh

clafister Messages postés 3 Statut Membre -  
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   -
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. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    Salut,

    Tiens déjà pour ton premier problème :
    var="NomduNiveau1_NomduNiveau2_NomduNiveau3_NomDufichier.pdf"
    
    echo ${var##*_}
    
    NomDufichier.pdf
    ;-))
    0
    1. clafister Messages postés 3 Statut Membre
       
      merci
      comment récupérer chacun des mots entre _ et initialiser autant de variables ?
      0
  2. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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
  3. clafister Messages postés 3 Statut Membre
     
    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
  4. jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 898
     
    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