Script bash : Test avant création repertoire

Bonjour,

dans un script bash j'ai besoin de traiter un fichier contenant :

less test2
toto-12-546
toto-12-1354
etc...


afin de créer les répertoires correspondant aux lignes présentes dans ce fichier mais j'ai besoin d'abord de vérifier que le répertoire n'existe pas avant de le créer afin d'éviter d'écraser des répertoires existants. J'ai donc fait ce qui suit mais cela ne fonctionne pas :
DIRAG="'cat test2'"

       if [ ! -d ${DIRAG} ]
       then
           mkdir -p ${DIRAG}
       else
            echo "un des repertoires exsite déjà"
              exit 1
       fi


Une idée?

Merci



--
L'accès au savoir est la première liberté que chaque homme devrait avoir.

6 réponses

  1. Juste encore une petite chose j'ai ajoute les lignes suivantes mais cela a l'air de coincer a
     cd  "${i}"

    for i in $(cat plop)
    do                  
            if [ -d "${i}" ]
            then            
                    echo "Le répertoire ${i} existe déjà..."
                    echo                                    
            else                                            
                    echo "Création du répertoire ${i}..."   
                    echo "mkdir ${i}"                       
                    mkdir "${i}"   
                     cd  "${i}"
                    touch acces.log;touch error.log
                    chown toto.toto access.log error.log;chmod 640 access.log error.log                        
                    echo                                    
            fi                                              
    done                 
                


    Merci
    2
    1. Modérateur
      Y'a pas des espaces dans le nom de tes répertoires, si ?

      Sinon, vire le ' cd "${i}" ' et rajoute :

      touch "${i}"/{acces,error}.log
      chown toto.toto "${i}"/{acces,error}.log && chmod 640  "${i}"/{acces,error}.log
      0
  2. Merci mais laisse je ne veux pas abuser de ton temps car pour le moment cela ne coince nulle part c'est juste pour optimiser mon script. donc je vais le terminé puis on verra pour l'optimser plutard. Merci encore
    0
    1. En faites la variable ${CREATEAG} est declarée et elle contient mon fichier :

      DIR="/'whoami'"
      DATE="'date '+%d%m%Y''"
      CREATELIST="${DIR}/list_${DATE}.lst"

      Concernant la variable ${GREATEAG} c'est une erreur de frappe c'est bien ${CREATEAG}

      le script est lancé via un utilisateur spécial avec un ENV ou toutes les variables sont déclarés via un autre script.
      0
      1. Modérateur
        Euh... je me perds là ;-((

        Dis-moi plutôt où ça coince, par ce que sans avoir toutes les données en main c'est très difficile d'optimiser les choses ;-(

        Lors de la création des liens (depuis le même fichier que celui qui permet la création des répertoires, exact ?) faut-il aussi tenir compte de la transformation des "news-xxx" en "news_xxx" ? Je suppose que oui ;-\

        Pour la transformation lors de la création des répertoires, remplacer :

        for i in $(cat ${CREATEAG})

        par
        for i in  $(sed 's/s-/s_/' ${CREATEAG})
        0
    2. Merci jipicy cela fonctionne. Sans vouloir abuser j'aurais besoin de tes conseils car je penses que je structure mal mon script, je m'explique.

      Le but de mon script est de faire des liens puis de créer des répertoires s'il n'existent puis dans chacun de ces repertoires un fichier access.log et error.log et ceci dans des PATH differents.

      Par exemple je creais dans /home mes liens

      puis je dois créer mes repertoires et mes ficheirs access.log et error.log et je dois repeter cette operation dans
      plusieurs paths differents selon la langue du site donc dans FR,EN etc.. :

      je dois donc avoir :
      /FR/logo-12-546/access.log et error.log
      /EN/logo-12-546/access.log et error.log
      /FR/news_5698756/ccess.log et error.log
      /EN/news_569875/access.log et error.log
      etc..

      Mes données a traiter sont dans un fichier qui contient :
      logo-12-524
      news-5698756
      logo-12-2156
      news-125468654

      attention les repertoires se nomant news doivent être créer avec un _ et non avec un - donc

      news-125468654 doit devenir news_125468654 .

      voila ce que j'ai fait pour le moment :

      #! /bin/bash  
      
      if [ -e ${CREATEAG} ]  
         then  
             cat ${CREATEAG} |  xargs -i sh -c "ln -s /tmp/{} /home/Desktop/{};test -L /home/Desktop/{} || echo erreur de creation d\'un ou plusieurs liens"  
      else  
            echo "Pas de fichiers pour la creation des liens"  
               exit 1  
      fi  
      
      cd /tmp  
      
      for i in $(cat ${CREATEAG})  
      do                    
              if [ -d "${i}" ]  
              then              
                      echo "Le répertoire ${i} existe déjà..."  
                      echo                                      
              else                                              
                      echo "Création du répertoire ${i}..."     
                      echo "mkdir ${i}"                         
                      mkdir "${i}"   
                      touch "${i}"/{acces,error}.log  
                      chown toto.toto "${i}"/{acces,error}.log && chmod 640  "${i}"/{acces,error}.log                       
                      echo                                      
              fi                                                
      done                       
      


      Qu'en penses tu?

      Merci

      L'accès au savoir est la première liberté que chaque homme devrait avoir.
      0
      1. Modérateur
        A 1ère vue ça semble bon. Tu as des erreurs avec ou des soucis ?

        Par contre il manque des éléments pour pouvoir t'aider à optimiser le tout (si c'est ce que tu attends...).

        Les variables "${CREATEAG}" et "${GREATEAG}" ne sont pas déclarées ;-\ (je suppose que tout le script n'est pas là ?)
        Elles contiennent quoi au juste ? Que le nom du fichier, ou le nom + le chemin ?

        Quelle différence de contenu entre ces 2 variables ?

        Si ce n'est que pour différencier les logo des news et transformer les "-" en "_" que sur les news, il doit y avoir moyen de faire plus simple...

        Le script est lancé d'où ?
        0
    3. Merci jipicy. Décidément toujours dispo pour venir en aide. Cool ;-)
      1
      1. Modérateur
        Salut,

        [jp@MDK-2010 tmpfs]$ ls -1       
        foo.sh*                          
        plop                             
        tete/                            
        toto/  
                                  
        [jp@MDK-2010 tmpfs]$ cat plop 
        toto                          
        tata                          
        tutu                          
        titi                          
        tete                          
        tyty    
                              
        [jp@MDK-2010 tmpfs]$ cat foo.sh 
        #! /bin/bash                    
        
        for i in $(cat plop)
        do                  
                if [ -d "${i}" ]
                then            
                        echo "Le répertoire ${i} existe déjà..."
                        echo                                    
                else                                            
                        echo "Création du répertoire ${i}..."   
                        echo "mkdir ${i}"                       
                        mkdir "${i}"                            
                        echo                                    
                fi                                              
        done                                                    
        
        [jp@MDK-2010 tmpfs]$ ./foo.sh 
        Le répertoire toto existe déjà...
        
        Création du répertoire tata...
        mkdir tata
        
        Création du répertoire tutu...
        mkdir tutu
        
        Création du répertoire titi...
        mkdir titi
        
        Le répertoire tete existe déjà...
        
        Création du répertoire tyty...
        mkdir tyty
        
        [jp@MDK-2010 tmpfs]$ ls -1
        foo.sh*
        plop
        tata/
        tete/
        titi/
        toto/
        tutu/
        tyty/
        [jp@MDK-2010 tmpfs]$
        
        

        ;-))
        1