Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
dossier_magique [Le 23/03/2015, 16:38] 82.232.246.38 |
dossier_magique [Le 11/09/2022, 11:55] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 3: | Ligne 3: | ||
---- | ---- | ||
- | ====== Dossier magique : classement automatique de fichiers ====== | + | ====== Dossier magique : classement automatique de fichiers ====== |
- | En 2007, sur [[http://forum.ubuntu-fr.org/viewtopic.php?id=144237|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. Cela a débouché sur le script "Dossier magique" qui est présenté ici. En cas de problème merci de poster sur le sujet précédemment cité. | + | En 2007, sur [[https://forum.ubuntu-fr.org/viewtopic.php?id=144237|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. Cela a débouché sur le script "Dossier magique" qui est présenté ici. En cas de problème merci de poster sur le sujet précédemment cité. |
- | Le code a été remanié en 2015 par erresse, afin d'ajouter au script une interface graphique permettant de l'utiliser plus facilement sans en passer obligatoirement par la ligne de commande. | + | Le code a été remanié en 2015 par erresse, afin d'ajouter au script une interface graphique permettant de l'utiliser plus facilement sans en passer obligatoirement par la ligne de commande. Le script gère maintenant la récursivité. |
===== Fichiers reconnus ===== | ===== Fichiers reconnus ===== | ||
Ligne 20: | Ligne 20: | ||
#!/bin/bash | #!/bin/bash | ||
- | CURRENT_VER=1.0 | + | CURRENT_VER=1.1 |
# initialisation des options | # initialisation des options | ||
Ligne 27: | Ligne 27: | ||
AIDE="FAUX" | AIDE="FAUX" | ||
VERSION="FAUX" | VERSION="FAUX" | ||
+ | RECURSIF="FAUX" | ||
# Définition des fonctions du script | # Définition des fonctions du script | ||
Ligne 74: | Ligne 75: | ||
{ | { | ||
cd "${1}" | cd "${1}" | ||
+ | # Faut-il gérer la récursivité pour les sources ? | ||
+ | if [[ "${RECURSIF}" = "VRAI" && "${DIR}" != "${1}" ]] | ||
+ | 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 "./" "${dossier}"* 2> /dev/null | ||
+ | # Puis on supprime le dossier vide | ||
+ | rmdir "${dossier}" | ||
+ | done < /tmp/tri | ||
+ | done | ||
+ | fi | ||
ls > /tmp/tri | ls > /tmp/tri | ||
while read fichier | while read fichier | ||
Ligne 132: | Ligne 150: | ||
# Testons d'abord si le script est lancé en mode terminal | # Testons d'abord si le script est lancé en mode terminal | ||
- | while getopts ":agtv-:" OPT | + | while getopts ":agrtv-:" OPT |
do | do | ||
# gestion des options longues avec ou sans argument | # gestion des options longues avec ou sans argument | ||
Ligne 138: | Ligne 156: | ||
aide) OPT="a" ;; | aide) OPT="a" ;; | ||
graphique) OPT="g" ;; | graphique) OPT="g" ;; | ||
+ | recursif) OPT="r";; | ||
terminal) OPT="t" ;; | terminal) OPT="t" ;; | ||
version) OPT="v" ;; | version) OPT="v" ;; | ||
Ligne 144: | Ligne 163: | ||
# puis gestion des options courtes | # puis gestion des options courtes | ||
case $OPT in | case $OPT in | ||
- | g) TERMINAL="FAUX" ;; | ||
a) AIDE="VRAI" ;; | a) AIDE="VRAI" ;; | ||
+ | g) TERMINAL="FAUX" ;; | ||
+ | r) RECURSIF="VRAI";; | ||
t) TERMINAL="VRAI" ;; | t) TERMINAL="VRAI" ;; | ||
v) VERSION="VRAI" ;; | v) VERSION="VRAI" ;; | ||
Ligne 161: | Ligne 181: | ||
echo " $0 -a | --aide Affiche l'aide." | echo " $0 -a | --aide Affiche l'aide." | ||
echo " $0 -v | --version Affiche la version." | echo " $0 -v | --version Affiche la version." | ||
+ | echo " $0 -r | --recursif Gére la récursivité." | ||
echo "Syntaxe 2 : en mode terminal avec paramètre(s) obligatoire(s)." | echo "Syntaxe 2 : en mode terminal avec paramètre(s) obligatoire(s)." | ||
echo " $0 -t | --terminal CIBLE [SOURCE1 ... SOURCEn]" | echo " $0 -t | --terminal CIBLE [SOURCE1 ... SOURCEn]" | ||
Ligne 190: | Ligne 211: | ||
then | then | ||
# On élimine les options pour charger le(s) paramètre(s) | # On élimine les options pour charger le(s) paramètre(s) | ||
- | shift | + | while [ "${1:0:1}" = "-" ] |
+ | do | ||
+ | shift | ||
+ | done | ||
if [ "${1}" = "" ] | if [ "${1}" = "" ] | ||
then | then | ||
Ligne 309: | Ligne 333: | ||
</note> | </note> | ||
- | 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 les versions récentes d'Ubuntu dans $HOME, à l'exception des dossiers Divers, Exécutables et Archives. |
- | + | ||
- | 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 ==== | ==== Types de fichier ==== | ||
Ligne 326: | Ligne 348: | ||
===== Utilisation ===== | ===== Utilisation ===== | ||
- | En ligne de commande : | + | **En ligne de commande :** |
- | dossier_magique répertoire1 répertoire2 ... | + | Le script accepte une option (longue %%--%%option ou courte -o) et un ou plusieurs paramètres. |
+ | Les options sont, respectivement : | ||
+ | [--terminal ou -t] --> Le script est lancé en ligne de commande | ||
+ | [--graphique ou -g] ou rien --> Le script est lancé en mode graphique. Il ne prend pas de paramètre sur la ligne | ||
+ | [--version ou -v] --> Affiche la version courante du script. Pas de paramètre | ||
+ | [--aide ou -a] --> Affiche un bref rappel d'aide pour l'utilisation. Pas de paramètre | ||
+ | [--recursif ou -r] --> Gère la récursivité. Note : Ajouter cette option à la commande de lancement dans les deux modes | ||
+ | Exemple : | ||
+ | ./dossier_magique -t | --terminal CIBLE SOURCE1 SOURCE2 ... | ||
+ | (où CIBLE, SOURCE1 ... SOURCEn sont des répertoires. CIBLE est le dossier "racine" résultant, SOURCE(s) les dossiers à classer. | ||
+ | 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 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 si vous référencez le dossier personnel (~/dossier/) dans le chemin, ne l'incluez pas dans les guillemets : |
+ | ./dossier_magique -t "répertoire CIBLE" ~/dossier/"répertoire SOURCE" ... | ||
- | 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 : | + | **En mode graphique :** |
- | dossier_magique "répertoire\ 1" "répertoire\ 2" ... | + | 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'aide, puis demande au fur et à mesure les dossiers à traiter : D'abord la "racine" CIBLE, unique, puis le(s) dossier(s) SOURCE(s) à classer. |
+ | Si vous voulez classer le dossier CIBLE lui-même, ne choisissez pas d'autre dossier pour la SOURCE, dans ce cas, CIBLE = SOURCE. | ||
+ | Si vous devez abandonner le script en cours de route (un doute sur le travail à exécuter...), cliquez simplement sur "Annuler" pour l'interrompre sans rien effectuer. | ||
===== Fichier de log ===== | ===== Fichier de log ===== | ||
Ligne 344: | Ligne 379: | ||
===== Exécution automatique ===== | ===== 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 [[:cron|crontab]]. On édite la crontab : | Pour exécuter automatiquement le script toutes les 5 minutes, par exemple, vous pouvez utiliser [[:cron|crontab]]. On édite la crontab : | ||
crontab -e | crontab -e | ||
Et on rajoute : | Et on rajoute : | ||
- | <code>*/5 * * * * /chemin/vers/dossier_magique</code> | + | <code>*/5 * * * * /chemin/vers/dossier_magique -t CIBLE [SOURCE...]</code> |
+ | |||
+ | ===== 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 : | ||
+ | {{:icons:dossier_magique.png|}} |