Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
dossier_magique [Le 07/09/2010, 07:51] – Maj Lien lmrv | dossier_magique [Le 22/06/2017, 13:16] (Version actuelle) – [Utilisation] Échappé deux "--" moko138 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | |||
+ | ---- | ||
+ | |||
+ | ====== Dossier magique : classement automatique de fichiers ====== | ||
+ | |||
+ | En 2007, sur [[http:// | ||
+ | Le code a été remanié en 2015 par erresse, afin d' | ||
+ | |||
+ | ===== Fichiers reconnus ===== | ||
+ | |||
+ | Actuellement, | ||
+ | |||
+ | |||
+ | ===== Le script ===== | ||
+ | |||
+ | Copiez-collez le script suivant dans un fichier, que vous appellerez par exemple " | ||
+ | |||
+ | < | ||
+ | #!/bin/bash | ||
+ | |||
+ | CURRENT_VER=1.1 | ||
+ | |||
+ | # initialisation des options | ||
+ | |||
+ | TERMINAL=" | ||
+ | AIDE=" | ||
+ | VERSION=" | ||
+ | RECURSIF=" | ||
+ | |||
+ | # Définition des fonctions du script | ||
+ | |||
+ | # Test du code retour de zenity : | ||
+ | function testcrd() | ||
+ | { | ||
+ | if [ ${crd} = -1 ]; then | ||
+ | zenity --error --title " | ||
+ | exit 2 | ||
+ | fi | ||
+ | if [ ${crd} = 1 ]; then | ||
+ | zenity --info --title " | ||
+ | exit 1 | ||
+ | fi | ||
+ | return 0 | ||
+ | } | ||
+ | |||
+ | # Déplacement d'un fichier et mise à jour du fichier log : | ||
+ | function bouge() | ||
+ | { | ||
+ | mv " | ||
+ | heure=`date +%D-%H:%m` | ||
+ | echo " | ||
+ | return 0 | ||
+ | } | ||
+ | |||
+ | # Créons les répertoires s'ils n' | ||
+ | function createdirs() | ||
+ | { | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | mkdir -p " | ||
+ | |||
+ | return 0 | ||
+ | } | ||
+ | |||
+ | # Trions les fichiers : | ||
+ | function tri() | ||
+ | { | ||
+ | cd " | ||
+ | # Faut-il gérer la récursivité pour les sources ? | ||
+ | if [[ " | ||
+ | then | ||
+ | crd=0 | ||
+ | while [ ${crd} = 0 ] | ||
+ | do | ||
+ | ls -d */ 2> /dev/null > /tmp/tri | ||
+ | crd=$? | ||
+ | while read dossier | ||
+ | do | ||
+ | # On remonte tout le dossier d'un niveau | ||
+ | mv -t " | ||
+ | # Puis on supprime le dossier vide | ||
+ | rmdir " | ||
+ | done < /tmp/tri | ||
+ | done | ||
+ | fi | ||
+ | ls > /tmp/tri | ||
+ | while read fichier | ||
+ | do | ||
+ | # Cas particulier des fichiers à traiter d' | ||
+ | type=" | ||
+ | case " | ||
+ | wma) bouge " | ||
+ | |||
+ | *) # Utilisons si possible le type mime : | ||
+ | type=`file -bi " | ||
+ | |||
+ | case " | ||
+ | *script*) bouge " | ||
+ | | ||
+ | *executable*) bouge " | ||
+ | | ||
+ | *pdf* | *dvi* | *postscript*) bouge " | ||
+ | | ||
+ | *audio* | *ogg*) bouge " | ||
+ | | ||
+ | *video* | *flash*) bouge " | ||
+ | | ||
+ | *image*) bouge " | ||
+ | |||
+ | *tar* | *rar* | *zip*) bouge " | ||
+ | |||
+ | *msword* | *excel* | *powerpoint* | *rtf* | *opendocument*) bouge " | ||
+ | |||
+ | *) # Si le type mime ne suffit pas : | ||
+ | type=`file -b " | ||
+ | |||
+ | case " | ||
+ | *directory*) continue;; | ||
+ | |||
+ | *byte-compiled*) bouge " | ||
+ | |||
+ | *script*) bouge " | ||
+ | |||
+ | *LaTeX*) bouge " | ||
+ | | ||
+ | *ASF*) bouge " | ||
+ | |||
+ | *text*) bouge " | ||
+ | | ||
+ | *) # Le type est donc inconnu : | ||
+ | bouge " | ||
+ | esac | ||
+ | ;; | ||
+ | esac | ||
+ | ;; | ||
+ | esac | ||
+ | | ||
+ | done < /tmp/tri | ||
+ | |||
+ | return 0 | ||
+ | } | ||
+ | |||
+ | # Testons d' | ||
+ | while getopts ": | ||
+ | do | ||
+ | # gestion des options longues avec ou sans argument | ||
+ | [ $OPT = " | ||
+ | aide) OPT=" | ||
+ | graphique) OPT=" | ||
+ | recursif) OPT=" | ||
+ | terminal) OPT=" | ||
+ | version) OPT=" | ||
+ | *) echo " | ||
+ | esac | ||
+ | # puis gestion des options courtes | ||
+ | case $OPT in | ||
+ | a) AIDE=" | ||
+ | g) TERMINAL=" | ||
+ | r) RECURSIF=" | ||
+ | t) TERMINAL=" | ||
+ | v) VERSION=" | ||
+ | *) echo " | ||
+ | esac | ||
+ | done | ||
+ | |||
+ | # Aide | ||
+ | |||
+ | if [ " | ||
+ | then | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | echo " | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Version | ||
+ | |||
+ | if [ " | ||
+ | then | ||
+ | echo " " | ||
+ | echo " | ||
+ | # head -15 $0 | grep -v bash | ||
+ | exit 0 | ||
+ | fi | ||
+ | |||
+ | # Mémorisons le répertoire courant | ||
+ | OLDDIR=`pwd` | ||
+ | # Initialisons le dossier racine CIBLE | ||
+ | DIR=" | ||
+ | # Définissons le fichier de log (aucun par défaut) | ||
+ | LOG="/ | ||
+ | |||
+ | # Option " | ||
+ | if [ " | ||
+ | then | ||
+ | # On élimine les options pour charger le(s) paramètre(s) | ||
+ | while [ " | ||
+ | do | ||
+ | shift | ||
+ | done | ||
+ | if [ " | ||
+ | then | ||
+ | echo "En mode terminal, indiquer obligatoirement le(s) paramètre(s)" | ||
+ | exit 1 | ||
+ | fi | ||
+ | # Sinon, exécution en mode graphique | ||
+ | else | ||
+ | # On affiche d' | ||
+ | echo "- Vous allez tout d' | ||
+ | echo " | ||
+ | echo "- Vous sélectionnerez ensuite le(s) dossier(s) '' | ||
+ | echo " | ||
+ | echo "- Note : Le dossier CIBLE peut être le même que le dossier SOURCE," | ||
+ | echo " | ||
+ | echo " | ||
+ | echo "*** Vous pouvez cliquer sur '' | ||
+ | zenity --text-info --title " | ||
+ | crd=$?; testcrd | ||
+ | fi | ||
+ | |||
+ | # Option " | ||
+ | if [ " | ||
+ | then | ||
+ | DIR=" | ||
+ | # Sinon, exécution en mode graphique | ||
+ | else | ||
+ | # On sélectionne d' | ||
+ | DIR=$(zenity --file-selection --title " | ||
+ | crd=$?; testcrd | ||
+ | fi | ||
+ | |||
+ | |||
+ | # Option " | ||
+ | if [ " | ||
+ | then | ||
+ | # Protégeons le séparateur standard et initialisons-le à " | ||
+ | OLDIFS=" | ||
+ | IFS=' | ||
+ | fi | ||
+ | # Option " | ||
+ | if [ " | ||
+ | then | ||
+ | # On recherche le(s) paramètre(s) SOURCE(S) éventuel(s) | ||
+ | shift | ||
+ | if [ " | ||
+ | then | ||
+ | # Pas de répertoire SOURCE, alors SOURCE = CIBLE | ||
+ | TABSCE=(" | ||
+ | else | ||
+ | # On charge le (la liste des) dossier(s) SOURCE(S) | ||
+ | TABSCE=(" | ||
+ | fi | ||
+ | # Sinon, exécution en mode graphique | ||
+ | else | ||
+ | # On peut sélectionner un ou plusieurs répertoires à trier | ||
+ | # (par défaut, on trie dans le même répertoire cible=source) | ||
+ | TABSCE=($(zenity --file-selection --title " | ||
+ | crd=$?; testcrd | ||
+ | fi | ||
+ | |||
+ | # Définition des répertoires (à adapter si besoin) : | ||
+ | TXT=" | ||
+ | PDF=" | ||
+ | AUDIO=" | ||
+ | VIDEO=" | ||
+ | IMG=" | ||
+ | ARCHIVES=" | ||
+ | DOCS=" | ||
+ | TEX=" | ||
+ | MISC=" | ||
+ | BIN=" | ||
+ | |||
+ | # Création des répertoires de tri dans le dossier cible | ||
+ | createdirs | ||
+ | for SCE in " | ||
+ | do | ||
+ | # Option " | ||
+ | if [ " | ||
+ | then | ||
+ | tri " | ||
+ | else | ||
+ | tri " | ||
+ | fi | ||
+ | done | ||
+ | |||
+ | # Restaurons le séparateur et le répertoire courant | ||
+ | IFS=" | ||
+ | cd " | ||
+ | |||
+ | # Option " | ||
+ | if [ " | ||
+ | then | ||
+ | # Restaurons le séparateur standard | ||
+ | IFS=" | ||
+ | # Nettoyons les fichiers temporaires générés | ||
+ | rm /tmp/notice /tmp/tri | ||
+ | |||
+ | zenity --info --title " | ||
+ | fi | ||
+ | |||
+ | exit 0 | ||
+ | </ | ||
+ | |||
+ | Enregistrez ce fichier dans un dossier de votre $HOME et rendez-le exécutable. | ||
+ | - En console : | ||
+ | chmod +x / | ||
+ | - En graphique avec le navigateur : clic droit sur le fichier > propriétés > permissions, | ||
+ | |||
+ | ===== Adaptation ===== | ||
+ | |||
+ | |||
+ | ==== Répertoires ==== | ||
+ | |||
+ | <note importante> | ||
+ | Ce script crée une série de sous-dossiers dans le dossier CIBLE. Si certains sous-dossiers existent déjà, ils ne seront pas re-créés ni vidés de leur contenu, les nouveaux fichiers y seront simplement ajoutés. | ||
+ | Si vous désirez nommer différemment les sous-dossiers créés par le script, vous pouvez adapter les définitions des répertoires. | ||
+ | </ | ||
+ | |||
+ | Les dossiers par défaut existent sous les versions récentes d' | ||
+ | |||
+ | ==== Types de fichier ==== | ||
+ | |||
+ | Pour supprimer par exemple les fichiers de type rar, il suffit de modifier la ligne : | ||
+ | < | ||
+ | en : | ||
+ | < | ||
+ | |||
+ | De même, pour rajouter un type de fichier, il suffit d' | ||
+ | file -bi un_fichier.test | ||
+ | |||
+ | |||
+ | ===== Utilisation ===== | ||
+ | |||
+ | **En ligne de commande :** | ||
+ | Le script accepte une option (longue %%--%%option ou courte -o) et un ou plusieurs paramètres. | ||
+ | Les options sont, respectivement : | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | | ||
+ | Exemple : | ||
+ | | ||
+ | (où CIBLE, SOURCE1 ... SOURCEn sont des répertoires. CIBLE est le dossier " | ||
+ | Si seul le répertoire CIBLE est spécifié, c'est ce répertoire qui sera classé par défaut. Dans ce cas, CIBLE = SOURCE. | ||
+ | |||
+ | Si les noms des répertoires contiennent des espaces et autres caractères spéciaux, mettez-les systématiquement entre guillemets et si vous référencez le dossier personnel (~/ | ||
+ | | ||
+ | |||
+ | **En mode graphique :** | ||
+ | En mode graphique, ne spécifiez ni paramètre ni option (ou -g | %%--%%graphique qui est la valeur par défaut). Le script affiche une petite fenêtre d' | ||
+ | Si vous voulez classer le dossier CIBLE lui-même, ne choisissez pas d' | ||
+ | Si vous devez abandonner le script en cours de route (un doute sur le travail à exécuter...), | ||
+ | |||
+ | ===== Fichier de log ===== | ||
+ | |||
+ | Par défaut, il n'y a pas de fichier de log. Il suffit de modifier la ligne | ||
+ | LOG=/ | ||
+ | par | ||
+ | LOG=chemin_du_fichier_voulu | ||
+ | pour garder une trace de tout mouvement de fichier dû au script. | ||
+ | |||
+ | ===== Exécution automatique ===== | ||
+ | |||
+ | Il est toujours possible, en lançant une exécution en ligne de commande, de faire fonctionner le script en exécution automatique. | ||
+ | Pour exécuter automatiquement le script toutes les 5 minutes, par exemple, vous pouvez utiliser [[: | ||
+ | crontab -e | ||
+ | |||
+ | Et on rajoute : | ||
+ | < | ||
+ | |||
+ | ===== Bonus ===== | ||
+ | |||
+ | Vous pouvez créer un lanceur sur le bureau ou dans le menu pour lancer facilement le script en mode graphique. Identifiez-le avec cette icône : | ||
+ | {{: | ||