Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| dossier_magique [Le 06/11/2007, 10:50] – créée 82.229.251.158 | 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 : | ||
| + | {{: | ||
