Script de tri bash

Résolu
Zoubsy -  
 Zoubsy -
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 !
A voir également:

13 réponses

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
for X in mp3 avi mpg wav mov ; do
mv *.$X dossier_$X
done
2
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Oups ;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
[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
Ssylvainsab Messages postés 2884 Date d'inscription   Statut Modérateur Dernière intervention   825
 
Salut !

Utilises la commande mv et le joker * :
mv dossier/*.mp3 autredossier/
--
Sylvain
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Zoubsy
 
Merci, mais la j'envoie tous mes fichiers dans un seul dossier, non ?
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Salut,

Non, chaque fichier est envoyé dans le dossier de même extension ;-))
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
Par contre il faut que chaque dossier existe avant, ou alors vérifier son existence dans le script et le créé le cas échéant ;-))
0
Zoubsy
 
D'accord, je vais essayer. Merci beaucoup !
0
Zoubsy
 
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 ?
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Affiche ce que tu tapes pour voir où est l'erreur
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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$
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Je savais pas, merchi ;-))
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570 > jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention  
 
En 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 ;-))

0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896 > lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention  
 
Bon 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
0
Zoubsy
 
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 !
0
jipicy Messages postés 40842 Date d'inscription   Statut Modérateur Dernière intervention   4 896
 
Affiche le contenu du répertoire avec tes fichiers, s'il te plaît.
0
Zoubsy
 
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 !
0
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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"
0
Zoubsy
 
D'accord, merci beaucoup !! Probleme résolu.
0