Script de tri bash

Résolu
Bonjour,
je souhaite créer un script de tri de fichier. C'est à dire un script qui déplacerait tous les fichiers mp3 d'un dossier vers un autre, tous les fichiers .avi vers un troisième et ainsi de suite.
Cependant je débute en bash (et sur linux en général), et je ne vois pas comment faire.
Merci d'avance !
Configuration: Linux (Ubunutu gutsy gibbon)
Firefox 2.0.0.13

13 réponses

  1. Contributeur
    hello
    for X in mp3 avi mpg wav mov ; do
    mv *.$X dossier_$X
    done
    1. Modérateur
      Salut !

      Utilises la commande mv et le joker * :
      mv dossier/*.mp3 autredossier/
      --
      Sylvain
      1. Merci, mais la j'envoie tous mes fichiers dans un seul dossier, non ?
        1. Modérateur
          Salut,

          Non, chaque fichier est envoyé dans le dossier de même extension ;-))
        2. Modérateur
          @jipicyPar contre il faut que chaque dossier existe avant, ou alors vérifier son existence dans le script et le créé le cas échéant ;-))
      2. Modérateur
        Salut,

        la commande de dubcek change le nom de fichiers de fichier.avi en dossier_avi
        il faut d'abord créer les répertoires
        lami20j@debian:~/trash$ for x in avi mp3 ogg; do mkdir dossier_$x;done
        lami20j@debian:~/trash$ ls -ld dossier_*
        drwxr-xr-x 2 lami20j lami20j 4096 2008-04-22 11:38 dossier_avi
        drwxr-xr-x 2 lami20j lami20j 4096 2008-04-22 11:38 dossier_mp3
        drwxr-xr-x 2 lami20j lami20j 4096 2008-04-22 11:38 dossier_ogg
        lami20j@debian:~/trash$ ls -lR dossier_*
        dossier_avi:
        total 0
        
        dossier_mp3:
        total 0
        
        dossier_ogg:
        total 0
        et ensuite deplacer
        l
        ami20j@debian:~/trash$ for x in avi mp3 ogg; do mv -v *.$x dossier_$x/;done
        `a.avi' -> `dossier_avi/a.avi'
        `a.mp3' -> `dossier_mp3/a.mp3'
        `a.ogg' -> `dossier_ogg/a.ogg'
        lami20j@debian:~/trash$ ls -lR dossier_*
        dossier_avi:
        total 0
        -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.avi
        
        dossier_mp3:
        total 0
        -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.mp3
        
        dossier_ogg:
        total 0
        -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.ogg
        lami20j@debian:~/trash$
        
        1. Modérateur
          Oups ;-))
      3. La création des dossiers marche, par contre le déplacement non :

        mv: option invalide --  
        Pour en savoir davantage, faites: « mv --help ».
        mv: option invalide --  
        Pour en savoir davantage, faites: « mv --help ».

        Sinon, pour la création des dossiers, il n'y a pas moyen de ne pas avoir a signaler l'extension, mais qu'il la trouve de lui-meme ?
        1. Modérateur
          [jp@MDK-2008 trash]$ tree
          .
          |-- fich1.avi
          |-- fich1.mov
          |-- fich1.mp3
          |-- fich1.mpg
          |-- fich1.wav
          |-- fich2.avi
          |-- fich2.mov
          |-- fich2.mp3
          |-- fich2.mpg
          |-- fich2.wav
          |-- fich3.avi
          |-- fich3.mov
          |-- fich3.mp3
          |-- fich3.mpg
          |-- fich3.wav
          |-- fich4.avi
          |-- fich4.mov
          |-- fich4.mp3
          |-- fich4.mpg
          |-- fich4.wav
          |-- fich5.avi
          |-- fich5.mov
          |-- fich5.mp3
          |-- fich5.mpg
          `-- fich5.wav
          
          0 directories, 25 files
          
          [jp@MDK-2008 trash]$ for X in mp3 avi mpg wav mov
          do 
          if [ ! -d "Dossier_$X" ]; then mkdir "Dossier_$X"
          fi
          mv *.$X Dossier_$X
          done
          
          [jp@MDK-2008 trash]$ tree
          .
          |-- Dossier_avi
          |   |-- fich1.avi
          |   |-- fich2.avi
          |   |-- fich3.avi
          |   |-- fich4.avi
          |   `-- fich5.avi
          |-- Dossier_mov
          |   |-- fich1.mov
          |   |-- fich2.mov
          |   |-- fich3.mov
          |   |-- fich4.mov
          |   `-- fich5.mov
          |-- Dossier_mp3
          |   |-- fich1.mp3
          |   |-- fich2.mp3
          |   |-- fich3.mp3
          |   |-- fich4.mp3
          |   `-- fich5.mp3
          |-- Dossier_mpg
          |   |-- fich1.mpg
          |   |-- fich2.mpg
          |   |-- fich3.mpg
          |   |-- fich4.mpg
          |   `-- fich5.mpg
          `-- Dossier_wav
              |-- fich1.wav
              |-- fich2.wav
              |-- fich3.wav
              |-- fich4.wav
              `-- fich5.wav
          
          5 directories, 25 files
          [jp@MDK-2008 trash]$ 
          ;-))
          1. Modérateur
            normalement il n'y a pas besoin de test pour mkdir ;-)
            lami20j@debian:~/trash$ ls -lR dossier_*
            dossier_avi:
            total 0
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.avi
            
            dossier_mp3:
            total 0
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.mp3
            
            dossier_ogg:
            total 0
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.ogg
            lami20j@debian:~/trash$ ls -l  *.{avi,ogg,mp3,mpg}
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:55 aaa.mpg
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:57 aa.avi
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:57 aa.mp3
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:57 aa.mpg
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:57 aa.ogg
            lami20j@debian:~/trash$ for x in avi mp3 m ogg; do mkdir dossier_$x;mv -v *.$x dossier_$x/;done 2>/dev/null
            `aa.avi' -> `dossier_avi/aa.avi'
            `aa.mp3' -> `dossier_mp3/aa.mp3'
            `aa.ogg' -> `dossier_ogg/aa.ogg'
            lami20j@debian:~/trash$ ls -lR dossier_*
            dossier_avi:
            total 0
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:57 aa.avi
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.avi
            
            dossier_m:
            total 0
            
            dossier_mp3:
            total 0
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:57 aa.mp3
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.mp3
            
            dossier_ogg:
            total 0
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 13:57 aa.ogg
            -rw-r--r-- 1 lami20j lami20j 0 2008-04-22 11:38 a.ogg
            lami20j@debian:~/trash$
            
            1. Modérateur
              Je savais pas, merchi ;-))
            2. Modérateur
              @jipicyEn fait si le répertoire existe il ne sera pas détruit mais un message d'erreur sera afficher
              Il nous reste juste à rédirectionner la sortie d'erreur pour ne pas poluer la console ;-))

            3. Modérateur
              @lami20jBon c'est sûr que pour un fainéant comme toi c'est plus court d'écrire :
              2>/dev/null
              que :
              if [ ! -d "blabla" ]; then mkdir blabla; fi

              ;-DDD
          2. Voila le script que j'ai executé :

            #!/bin/sh
            
            for X in jpg JPG avi mpg mpeg
            do 
            if [ ! -d "Dossier_$X" ]; then mkdir "Dossier_$X"
            fi
            mv *.$X Dossier_$X
            done


            Résultat : mes fichiers n'ont pas bougés, cependant les dossiers "Dossiers_.jpg" et autres ont bien étés crées, par contre je sais pas si le point dans le nom du dossier est normal.
            Merci de votre aide !
            1. Modérateur
              Affiche le contenu du répertoire avec tes fichiers, s'il te plaît.
              1. C'est bon, j'ai réussi, ça marche impec, j'avais juste oublié le $ dans
                mv *.$X Dossier_$X
                . Merci encore !
                J'ai juste une petite question : quelqu'un pourrait-il m'expliquer ce que signifie
                [ ! -d "Dossier_$X" ]
                Merci encore !
                1. Modérateur
                  Salut,

                  c'est un test pour voir si le dossier existe

                  if [ ! -d "Dossier_$X" ]; then mkdir "Dossier_$X"


                  Voici la traduction
                  Si [  il n'y pas de répertoire "Dossier_$X" ]; ALORS créer  le répertoire "Dossier_$X"