Contenu | Rechercher | Menus

Ceci est une ancienne révision du document !


Dossier magique

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é.

Première version

Fichiers reconnus

Actuellement, le script reconnaît (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 video, 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 signallant sur le forum, merci…).

Le script

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=/Commun/tri
TXT=${DIR}/txt
PDF=${DIR}/pdf
AUDIO=${DIR}/audio
VIDEO=${DIR}/video
IMG=${DIR}/images
ARCHIVES=${DIR}/archives
DOCS=${DIR}/docs
TEX=${DIR}/latex
MISC=${DIR}/misc


# 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".

Adaptation

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 /Commun/tri (toutes les définitions commencent par ${DIR}/, or DIR=/Commun/tri).

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

Utilisation

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 slash :

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

Fichier de log

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.

Exécution automatique

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

Seconde version

Xelator ?



Le contenu de ce wiki est sous licence : CC BY-SA v3.0