Ceci est une ancienne révision du document !



Dossier magique : tri automatique de fichiers

Sur l'initiative de xelator, quelques scripts ont été créés afin de ranger automatiquement les fichiers selon leur contenu : les .ogg avec les .ogg, les .avi avec les .avi, etc. Ces scripts sont présentés ici, en cas de problème merci de poster sur le sujet précédemment cité.

Actuellement, le script reconnait (en se basant notamment sur leur type MIME) les fichiers de type texte, pdf, dvi, ps/postscript, ogg, la plupart des formats audio,la plupart des formats vidéo, flash, ASF, la plupart des formats image, les archives tar, rar et zip/gzip, les scripts shell, les documents MS-Word, et les fichiers LaTeX. N'hésitez pas à en rajouter (en le signalant sur le forum, merci…).

Copiez-collez le script suivant dans un fichier, que vous appellerez par exemple dossier_magique, pour faire original :

#!/bin/bash

# Définitions des répertoires, à adapter :
DIR=${HOME}
TXT=${DIR}/Documents
PDF=${DIR}/Documents
AUDIO=${DIR}/Musique
VIDEO=${DIR}/Vidéos
IMG=${DIR}/Images
ARCHIVES=${DIR}/Archives
DOCS=${DIR}/Documents
TEX=${DIR}/Documents
MISC=${DIR}/Divers


# Fichier de log :
LOG=/dev/null


# Déplacement d'un fichier et mise à jour du fichier log :
function bouge()
{
    mv ${1} ${2}
    heure=`date +%D-%H:%m`
    echo "[${heure}] ${1} déplacé dans ${2}" >> ${LOG}
    return 0
}


# Créons les répertoires s'ils n'existent pas :
function createdirs()
{
    mkdir -p ${TXT}
    mkdir -p ${PDF}
    mkdir -p ${AUDIO}
    mkdir -p ${VIDEO}
    mkdir -p ${IMG}
    mkdir -p ${ARCHIVES}
    mkdir -p ${DOCS}
    mkdir -p ${TEX}
    mkdir -p ${MISC}

    return 0
}

# Trions les fichiers :
function tri()
{
    cd ${1}
    ls > /tmp/tri
    sed -i 's/\ /_/g' /tmp/tri
    echo "Triage des fichiers du répertoire ${1}..."
    while read fichier
    do
        # Utilisons si possible le type mime :
        type=`file -bi ${fichier}`

        case ${type} in
            *text*) bouge ${fichier} ${TXT};;
        
            *pdf* | *dvi* | *postscript*) bouge ${fichier} ${PDF};;
            
            *audio* | *ogg*) bouge ${fichier} ${AUDIO};;
        
            *video* | *flash*) bouge ${fichier} ${VIDEO};;
    
            *image*) bouge ${fichier} ${IMG};;

            *tar* | *rar* | *zip*) bouge ${fichier} ${ARCHIVES};;

            *shellscript*) bouge ${fichier} ${TXT};;
            
            *msword*) bouge ${fichier} ${DOCS};;
        esac
        
        # Si le type mime ne suffit pas :
        type=`file -b ${fichier}`

        case ${type} in
            *directory*) continue;;
               
            *LaTeX*) bouge ${fichier} ${TEX};;
        
            *ASF*) bouge ${fichier} ${VIDEO};;
    
                      # Type inconnu :
            *) bouge ${fichier} ${MISC};;
        esac

    done < /tmp/tri

    echo "Terminé."
    cd ${OLDDIR}

    return 0
}


# Si des répertoires sont passés en argument, on les trie, sinon on trie le répertoire par défaut
OLDDIR=`pwd`
createdirs
if [ $# -eq 0 ]
then
    tri ${DIR}
else
    while [ $# -gt 0 ]
    do
        tri ${1}
        shift
    done
fi
exit 0

Rendez ce fichier exécutable. - En console :

chmod +x /chemin/vers/le/fichier/dossier_magique

- Sous gnome : clic droit sur le fichier > propriétés > permissions, et cochez la case "Exécution, autoriser l'exécution du fichier comme un programme".

Répertoires

En l'état, ce script ne fera pas ce que vous voulez. Vous devez adapter les définitions des répertoires, au début du script.

Dans cet exemple, les dossiers sont tous situés dans le répertoire /home/votre_login (toutes les définitions commencent par ${DIR}/, or DIR=${HOME}).

Les dossiers par défaut existent sous Ubuntu Gutsy (mais pas sous les versions précédentes !), à l'exception des dossiers Divers et Archives.

Types de fichier

Pour supprimer par exemple les fichiers de type rar, il suffit de modifier la ligne :

*tar* | *rar* | *zip*) bouge ${fichier} ${ARCHIVES};;

en :

*tar* | *zip*) bouge ${fichier} ${ARCHIVES};;

De même, pour rajouter un type de fichier, il suffit d'adapter ou de créer la ligne correspondante. Les types de fichiers sont reconnus grâce à la commande file, donc pour savoir quoi rajouter un petit test s'impose :

file -bi un_fichier.test

En ligne de commande :

dossier_magique répertoire1 répertoire2 ...

Si aucun répertoire n'est spécifié, le répertoire par défaut sera trié.

Si les noms des répertoires contiennent des espaces et autres caractères spéciaux, mettez-les systématiquement entre guillemets et précédez ces caractères d'un antislash :

dossier_magique "répertoire\ 1" "répertoire\ 2" ...

Par défaut, il n'y a pas de fichier de log. Il suffit de modifier la ligne

LOG=/dev/null

par

LOG=chemin_du_fichier_voulu

pour garder une trace de tout mouvement de fichier dû au script.

Pour exécuter automatiquement le script toutes les 5 minutes, par exemple, vous pouvez utiliser crontab. On édite la crontab :

crontab -e

Et on rajoute :

*/5 * * * * /chemin/vers/dossier_magique
  • dossier_magique.1283838691.txt.gz
  • Dernière modification: Le 07/09/2010, 07:51
  • par lmrv