#1 Le 10/11/2007, à 12:15
- yleetiny
[Script] [ABANDON] Maintenir un classement des fichiers
bon j'ai fait une version décrite ci-dessous, mais avant de developper plus l'interface graphique (pour le moment uniquement la partie configuration l'est en utilisant zenity)...
EDIT> voir le post #3 pour la description du programme
j'aimerais savoir si le programme est vraiment stable...
Je lances donc un appel aux testeurs...
l'utilisation du code est inscrit au début du script.
Voici la bête:
#!/bin/bash
#----------------------------------------------------------
#
#DESCRIPTION: script permettant de maintenir son classement
#
#DEPENDANCES : zenity
#USAGE:
# "" execute avec les options par défaut
# -t "ddc" classe en fonction des sous-répertoires de "ddc" (dossier déjà classé)
# -d "dir_a_classer" classe le dossier "dir_a_classer"
# -c permet de configurer les valeurs par défauts
# -a annule le dernier classement effectué.
# -e "com" execute les scripts externe "com"
#----------------------------------------------------------
#paramètres :
IFS_bakcup=$IFS
IFS=$'\t\n' #permet de supprimer l'espace comme séparateur d'arguments
#==============================================================
##les paramètres du script
#==============================================================
#gestion des classements par types de fichier
FICH_CONF="$HOME/.classer.conf"
#
if [ "$1" = "-c" ] || [ ! -x $FICH_CONF ]
then
echo "passage en mode configuration"
FICH_LOG=${FICH_LOG:-"/tmp/classer.log"}
INTERFACE_GRAPHIQUE=1
DIR_A_CLASSER_PAR_DEFAUT="$PWD"
DIR_DEJA_CLASSE_PAR_DEFAUT="$HOME"
else
. $FICH_CONF
fi
#==============================================================
##les petites fonctions
#==============================================================
#====
Rech_Deplacer()#
{
DirRech="$1"
String="*$2*"
DirDest="$3"
find "$DirRech" -wholename "$DirDest" -prune -o -type f -iname "$String" -exec mv -v -t "$DirDest" '{}'>>$FICH_LOG \;
}
#====
Suppr_Dossiers_Vides()
{
Lst_Dossiers=( $(find "$1" -type d -print) )
for Dir in ${Lst_Dossiers[@]}
do
nb_fichiers=$(ls -A "$Dir" | wc -l)
if [ $nb_fichiers -eq 0 ]
then
echo "suppression: $Dir" >> $FICH_LOG
rmdir -v "$Dir"
fi
done
}
#====
maintenir_orga() #
{
if ! [ $(expr ${#@} % 2) -eq 0 ]
then
echo "mauvais nombre d'arguments"
exit 0
fi
args=( $@ )
index_max=$(( ${#args[*]} / 2))
echo "" > $FICH_LOG
for ((index=0 ;index < index_max; index++))
do
DirAOrga="${args[index]}"
DirOrga="${args[index+1]}"
#le classement
LstDirOrg=( $(find $DirOrga -maxdepth 1 -type d -print) )
for Dir in ${LstDirOrg[@]}
do
if [ $Dir != "." ]
then
String="$(basename $Dir)"
echo -e "classement: $DirAOrga $String $Dir" >>$FICH_LOG
Rech_Deplacer $DirAOrga $String $Dir
fi
done
#suppression des dossiers vides
Suppr_Dossiers_Vides $DirAOrga
done
}
#===
Appeller_script_ext()
{
for script in ${scripts_sup[*]}
do
if [ "$(basename $script)" = "$2" ]
then
echo "appel du script externe: $2 "
shift;shift
$script "$*"
exit 0
fi
done
echo -e "script non trouvé.\nLISTE DES SCRIPTS DISPONNIBLES:"
echo -e "chemin du script \t commande associée"
for script in ${scripts_sup[*]}
do
echo -e "$script \t $(basename $script)"
done
exit 0
}
#===
Annuler()
{
for suppr in $(grep "suppression:" $FICH_LOG)
do
suppr=${suppr#"suppression: "}
mkdir -pv "$suppr"
done
for deplacement in $(grep "\->" $FICH_LOG)
do
C_Ori=$(echo ${deplacement} | awk '{print $1}')
C_Ori=${C_Ori//"\`"/""}
C_Ori=${C_Ori//"'"/""}
C_Fin=$(echo ${deplacement} | awk '{print $3}')
C_Fin=${C_Fin//"\`"/""}
C_Fin=${C_Fin//"'"/""}
mv -v -T "$C_Fin" "$C_Ori"
done
exit 0
}
#=======================================
#inteface utilisateur
#=======================================
#====
Configurer()#
{
#demande de reconfiguration
if [ -f $FICH_CONF ]
then
if $(zenity --question \
--text="Fichier de configuration $FICH_CONF existe :\n Voulez vous l'écraser?")
then
echo "" > $FICH_CONF
chmod +x $FICH_CONF
else
zenity --info \
--text="configuration précendente conservée"
exit 0
fi
fi
#demande le type d'interface
if $(zenity --question --text="Voulez vous une interface graphique?")
then
echo "INTERFACE_GRAPHIQUE=1" >> $FICH_CONF
else
echo "INTERFACE_GRAPHIQUE=0" >> $FICH_CONF
fi
#demande des paramètres par défaut
DOSS=$(zenity --file-selection --directory \
--title="Dossier à classer par défaut" \
--text="Quel est le dossier à classer par défaut")
echo -e "DIR_A_CLASSER_PAR_DEFAUT=\"$DOSS\"" >> $FICH_CONF
DOSS=$(zenity --file-selection --directory \
--title="Dossier déjà classé par défaut" \
--text="Quel est le dossier à classer par défaut")
echo -e "DIR_DEJA_CLASSE_PAR_DEFAUT=\"$DOSS\"" >> $FICH_CONF
echo -e "FICH_LOG=\"$FICH_LOG\"" >> $FICH_CONF
#ajout des scripts externe
nbse=0
Ajouter_script_externe()
{
if $(zenity --question --text="$nbse script\(s\) externe\(s\) existant\(s\) \n Voulez vous ajoutez un script externe?")
then
CHEMIN_FICHIER=$(zenity --file-selection \
--title="sélection du script supplémentaire" \
--text="Veuillez sélectionner le script supplémentaire")
if [ -x $CHEMIN_FICHIER ]
then
script_sup=$CHEMIN_FICHIER
echo -e "scripts_sup[${nbse}]='$script_sup'" >> $FICH_CONF
nbse=$(($nbse+1))
else
zenity --error \
--text="le script n'est pas valide : fichier non executable"
fi
Ajouter_script_externe
else
more $FICH_CONF
exit 0
fi
}
Ajouter_script_externe
}
#---------------------------------------------------
#l'interface du programme en lui meme
if [ ! -x $FICH_CONF ]
then
echo "fichier de configuration non trouvé"
echo "passage en mode configuration"
Configurer
fi
DIR_A_CLASSER="$DIR_A_CLASSER_PAR_DEFAUT"
DIR_DEJA_CLASSE="${DIR_DEJA_CLASSE_PAR_DEFAUT}"
while getopts "acd:e:t:" Option
do
case $Option in
a ) Annuler ;;
c ) Configurer ;;
d ) DIR_A_CLASSER="$OPTARG";;
e ) Appeller_script_ext $* ;;
t ) DIR_DEJA_CLASSE="$OPTARG" ;;
* ) echo "erreur"; exit 0 ;;
esac
done
maintenir_orga "$DIR_A_CLASSER" "${DIR_DEJA_CLASSE}"
Idées, suggestions, retours d'expériences sont bienvenues...
tout autant que les bugs, qui m'aideront à le rendre plus stable...
Dernière modification par yleetiny (Le 18/12/2007, à 16:22)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#2 Le 10/11/2007, à 12:58
- xelator
Re : [Script] [ABANDON] Maintenir un classement des fichiers
pour le dossier . , mv ne le déplacera pas car il n'a pas l'option -r
donc ce n'est pas gênant si ?
Hors ligne
#3 Le 10/11/2007, à 13:17
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
la gêne provient que "." sera reconnu dans les noms des fichiers à classer et donc tout risque d'être déplacer dans le dossier classé . et non ses sous-dossiers.
=====================================
ANCIEN MESSAGE
=====================================
Bonjour,
comme je suis un peu désorganisé (méthode du tout dans un meme répertoire)... j'aimerais créer un script pour maintenir l'organisation de mes fichiers.
[b]Description de la situation :
Je possède des dossiers déjà classés...
Je possède un dossier fouretout.
Mon But :
1- gérer les caractères spéciaux autre que l'espace (les accollades par exemples)
2- gérer les récursivités - ie: les sous-dossiers des "sous-dossiers du dossier classé"
3- gérer un classement automatique... en comparant les noms des fichiers (par exemple si il y a + de n fichiers avec le même motif dans le noms, on créé un dossier avec pour nom le motif et on dépace les fichiers vers celui-ci)
Ce qui est implémenter:
1- classement du dossier à classer en fonction des sous-répertoires d'un dossier déjà classé
2- le classement du dossier à classer en fonction des extensions ou des types mimes, en appelant d'autres scripts (xelator et/ou skippy le grand gourou)
3- suppression des dossiers vides restants après le classement
Idées à developper:
1- création d'un fichier log, permettant ensuite l'annulation des commandes faites
2- une interface, graphique ou non
3- vérification des archives extraites,si oui, on supprime les archives, si non on extrait, et on classe
Mes soucis :
Actuels:
1- gestion des caractères spéciaux dans les noms ([ et autres)-- les espaces étants déjà gérés
du genre convertir une chaine de caractères avec des caractères spéciaux en une littérale automatiquement (ajouts des \ qui vont bien)
2- quelle est la commande la plus simple/flexible permettant de comparer deux chaà®nes de caractères?
(trouver les points commun et autre, à l'image du diff/Tkdiff pour les fichiers)
Pour plus tard
1- comment faire un find avec plusieurs dossiers non cherchés (-prune)?
Merci d'avance pour vos réponses...
Mon code actuel :
#!/bin/bash
#----------------------------------------------------------
#
#DESCRIPTION: script permettant de maintenir son classement
#
#----------------------------------------------------------
#paramètres :
IFS_bakcup=$IFS
IFS=$'\t\n' #permet de supprimer l'espace comme séparateur d'arguments
#==============================================================
##les paramètres du script
#==============================================================
#gestion des classements par types de fichier
#appels des autres scripts.
CLASSER_PAR_MIME="~/tests/skippy" #pour classer par les types mime, par ex: chemin du script vers celui de skippy le grand gourou
CLASSER_PAR_EXT="~/tests/xelator" #pour classer par les extensions par ex: chemin du script vers celui de xelator
#autres
D_DEJA_CLASS_DEFAULT="~/DOSS_CLASSE" #chemin vers le dossier déjà classé par défault
#==============================================================
##les petites fonctions
#==============================================================
Rech_Deplacer()#
{
DirRech="$1"
String="*$2*"
DirDest="$3"
find "$DirRech" -wholename "$DirDest" -prune -o -type f -iname "$String" -exec mv -v -t "$DirDest" '{}' \;
}
Suppr_Dossiers_Vides()
{
Lst_Dossiers=$(find "$1" -type d -print)
#echo $Lst_Dossiers
for Dir in $Lst_Dossiers
do
nb_fichiers=$(ls -A "$Dir" | wc -l)
if [ $nb_fichiers -eq 0 ]
then
#echo "supression de $Dir"
rmdir -v "$Dir"
fi
done
}
maintenir_orga() #
{
DirAOrga="$1"
DirOrga="$2"
#le classement
LstDirOrg=$(find $DirOrga -maxdepth 1 -type d -print)
for Dir in $LstDirOrg
do
if [ $Dir != "." ]
then
String="$(basename $Dir)"
#echo -e $DirAOrga $String $Dir
Rech_Deplacer $DirAOrga $String $Dir
fi
done
#suppression des dossiers vides
Suppr_Dossiers_Vides $DirAOrga
}
#=======================================
#inteface utilisateur
#=======================================
if [ $# -eq 0 ]
then
maintenir_orga "$PWD" $D_DEJA_CLASS_DEFAULT
elif [ $# -eq 1 ]
then
maintenir_orga "$1" $D_DEJA_CLASS_DEFAULT
elif [ $# -eq 2 ]
then
if [ "$1" = "--mime" ]
then
echo $CLASSER_PAR_MIME "$2"
elif [ "$1" = "--ext" ]
then
echo $CLASSER_PAR_EXT "$2"
else
maintenir_orga "$1" "$2"
fi
else
echo "cas non traitee..."
fi
#remise en place des valeurs IFS initiales
IFS=$IFS_backup #ou unset IFS
Pourriez-vous m'aider s'il vous plaà®t?
(ce programme interesse aussi d'autres personnes -> cf forum dossier_magique )
======================================================================
Codes existants (extraits du dossier_magiques)
1- par "Skippy le Grand Gourou" : pour classer par fonctions (Videos, documents, etc. ) grà¢ce au "file -i". (ne gère pas les récurences, on peut le trouver sur le wiki "dossier_magique")
#!/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
2- par xelator : même type de tri que 1, mais en classant à partir des extensions.
(rédaction en cours car il existe plusieurs versions)
3- par mimioux : même chose que xelator, mais en perl...cf post #6
Dernière modification par yleetiny (Le 26/11/2007, à 21:44)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#4 Le 15/11/2007, à 11:41
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
Bon plutà´t que de faire un seul script bash... j'ai développé quelques fonctions à appeler comme bon vous semble...
#!/bin/bash
#----------------------------------------------------------
#
#DESCRIPTION: script permettant de maintenir son classement
#
#----------------------------------------------------------
#paramètres :
IFS_bakcup=$IFS
IFS=$'\t\n' #permet de supprimer l'espace comme séparateur d'arguments
Rech_Deplacer()#
{
DirRech="$1"
String="*$2*"
DirDest="$3"
find "$DirRech" -wholename "$DirDest" -prune -o -type f -iname "$String" -exec mv -v -t "$DirDest" '{}' \;
}
maintenir_orga() #
{
DirAOrga="$1"
DirOrga="$2"
LstDirOrg=$(find $DirOrga -maxdepth 1 -type d -print)
for Dir in $LstDirOrg
do
if [ $Dir != "." ]
then
String="$(basename $Dir)"
#echo -e $DirAOrga $String $Dir
Rech_Deplacer $DirAOrga $String $Dir
fi
done
}
#Utilisations
#maintenir_orga "DirAClasser" "DirDéjà Classé" (chemin complet)
#remise en place des valeurs initiales
IFS=$IFS_backup #ou unset IFS
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#5 Le 15/11/2007, à 12:07
- Gojita
Re : [Script] [ABANDON] Maintenir un classement des fichiers
pour ne pas prendre en compte le répertoire '.'
tu rajoute un
find .... | egrep -v '^.$'
Il y a 10 sortes de personnes
Celles qui savent compter en binaires et les autres.
Hors ligne
#6 Le 23/11/2007, à 19:35
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
juste pour signaler une mise à jour de mon premier post....
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#7 Le 25/11/2007, à 13:57
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
NOUVELLE IDEE
je crois avoir trouvé comment faire une belle interface graphique: utilisation de zenity...
on peut même envisager de créer la configuration par défaut... à travers celle-ci.
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#8 Le 26/11/2007, à 10:03
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
bon je me remets à programmer, la plupart de mes probs sont résolus...maintenant....
je passe progressivement à une interface graphique par zenity...
(le post #1 n'est plus à jour mais c'est pas grave)
Version en développement.
Euh... juste pour ne pas froisser les gens... j'ai pas implémenté toutes les fonctions...mais je leur ai laissé la possibilité d'appeler des scripts externes...
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#9 Le 26/11/2007, à 12:40
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
NEWS: je lance un appel aux testeurs...
en espérant que mon programme plaira...
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#10 Le 26/11/2007, à 17:51
- U-topic
Re : [Script] [ABANDON] Maintenir un classement des fichiers
Heu chez moi ca ne marche pas...
Voici une tite partie des messages d'erreur :
~/Desktop]% ./rangement Default
./rangemt: line 33: /home/y/.classer.conf: Aucun fichier ou répertoire de ce type
find: AVERTISSEMENT: les noms de fichiers Unix habituellement ne contiennent pas de barre obliques (sauf pour les chemins). Cela signifie que '-iname *./ov51x-jpeg-1.5.2*' sera évaluer comme étant faux tout le temps sur ce système. Vous pouvez trouver que le test '-wholename' est plus utile ou encore celui de '-samefile'. Alternativement, si vous utilisez GNU grep, vous devriez utiliser 'find ... -print0 | grep -FzZ *./ov51x-jpeg-1.5.2*'.
Peut etre n'ais-je pas fait la bonne manip...En tout cas ce script est une très bonne idée...
Hors ligne
#11 Le 26/11/2007, à 19:30
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
Ah oui, il faut que tu lances une première fois la configuration par :
ca te permet de créer un fichier configuration d'abord
./rangement -c
Bon ben premier bug...
Dernière modification par yleetiny (Le 26/11/2007, à 19:35)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#12 Le 26/11/2007, à 19:52
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
j'ai modifié le code...ca doit passer sans faire le -c au départ.... (si le fichier n'existe pas, il passera en mode configuration)
et Merci U-topic!
Dernière modification par yleetiny (Le 26/11/2007, à 19:52)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#13 Le 26/11/2007, à 21:06
- U-topic
Re : [Script] [ABANDON] Maintenir un classement des fichiers
Oki ! j'ai pris la dernière version du script...
Cela dit :
~/Desktop]% ./rangemt
find: ~: Aucun fichier ou répertoire de ce type
J'ai sauté une étape...?
Hors ligne
#14 Le 26/11/2007, à 21:08
- U-topic
Re : [Script] [ABANDON] Maintenir un classement des fichiers
Je précise que je n'est pas eu le mode configuration même avec l'option-c
Hors ligne
#15 Le 26/11/2007, à 21:23
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
étrange, je me suis peut-être trompé quelque part:
en attendant voici le fichier sur lequel je bosse (et qui fonctionne chez moi en tout cas)
#!/bin/bash
#----------------------------------------------------------
#
#DESCRIPTION: script permettant de maintenir son classement
#
#DEPENDANCES : zenity
#USAGE:
# "" execute avec les options par défaut
# -t "ddc" classe en fonction des sous-répertoires de "ddc" (dossier déjà classé)
# -d "dir_a_classer" classe le dossier "dir_a_classer"
# -c permet de configurer les valeurs par défauts
# -a annule le dernier classement effectué.
# -e "com" execute les scripts externe "com"
#----------------------------------------------------------
#paramètres :
IFS_bakcup=$IFS
IFS=$'\t\n' #permet de supprimer l'espace comme séparateur d'arguments
#==============================================================
##les paramètres du script
#==============================================================
#gestion des classements par types de fichier
FICH_CONF="$HOME/.classer.conf"
#
if [ "$1" = "-c" ] || [ ! -x $FICH_CONF ]
then
echo "passage en mode configuration"
FICH_LOG=${FICH_LOG:-"/tmp/classer.log"}
INTERFACE_GRAPHIQUE=1
DIR_A_CLASSER_PAR_DEFAUT="$PWD"
DIR_DEJA_CLASSE_PAR_DEFAUT="$HOME"
else
. $FICH_CONF
fi
#==============================================================
##les petites fonctions
#==============================================================
#====
Rech_Deplacer()#
{
DirRech="$1"
String="*$2*"
DirDest="$3"
find "$DirRech" -wholename "$DirDest" -prune -o -type f -iname "$String" -exec mv -v -t "$DirDest" '{}'>>$FICH_LOG \;
}
#====
Suppr_Dossiers_Vides()
{
Lst_Dossiers=( $(find "$1" -type d -print) )
for Dir in ${Lst_Dossiers[@]}
do
nb_fichiers=$(ls -A "$Dir" | wc -l)
if [ $nb_fichiers -eq 0 ]
then
echo "suppression: $Dir" >> $FICH_LOG
rmdir -v "$Dir"
fi
done
}
#====
maintenir_orga() #
{
if ! [ $(expr ${#@} % 2) -eq 0 ]
then
echo "mauvais nombre d'arguments"
exit 0
fi
args=( $@ )
index_max=$(( ${#args[*]} / 2))
echo "" > $FICH_LOG
for ((index=0 ;index < index_max; index++))
do
DirAOrga="${args[index]}"
DirOrga="${args[index+1]}"
#le classement
LstDirOrg=( $(find $DirOrga -maxdepth 1 -type d -print) )
for Dir in ${LstDirOrg[@]}
do
if [ $Dir != "." ]
then
String="$(basename $Dir)"
echo -e "classement: $DirAOrga $String $Dir" >>$FICH_LOG
Rech_Deplacer $DirAOrga $String $Dir
fi
done
#suppression des dossiers vides
Suppr_Dossiers_Vides $DirAOrga
done
}
#===
Appeller_script_ext()
{
for script in ${scripts_sup[*]}
do
if [ "$(basename $script)" = "$2" ]
then
echo "appel du script externe: $2 "
shift;shift
$script "$*"
exit 0
fi
done
echo -e "script non trouvé.\nLISTE DES SCRIPTS DISPONNIBLES:"
echo -e "chemin du script \t commande associée"
for script in ${scripts_sup[*]}
do
echo -e "$script \t $(basename $script)"
done
exit 0
}
#===
Annuler()
{
for suppr in $(grep "suppression:" $FICH_LOG)
do
suppr=${suppr#"suppression: "}
mkdir -pv "$suppr"
done
for deplacement in $(grep "\->" $FICH_LOG)
do
C_Ori=$(echo ${deplacement} | awk '{print $1}')
C_Ori=${C_Ori//"\`"/""}
C_Ori=${C_Ori//"'"/""}
C_Fin=$(echo ${deplacement} | awk '{print $3}')
C_Fin=${C_Fin//"\`"/""}
C_Fin=${C_Fin//"'"/""}
mv -v -T "$C_Fin" "$C_Ori"
done
exit 0
}
#=======================================
#inteface utilisateur
#=======================================
#====
Configurer()#
{
#demande de reconfiguration
if [ -f $FICH_CONF ]
then
if $(zenity --question \
--text="Fichier de configuration $FICH_CONF existe :\n Voulez vous l'écraser?")
then
echo "" > $FICH_CONF
chmod +x $FICH_CONF
else
zenity --info \
--text="configuration précendente conservée"
exit 0
fi
fi
#demande le type d'interface
if $(zenity --question --text="Voulez vous une interface graphique?")
then
echo "INTERFACE_GRAPHIQUE=1" >> $FICH_CONF
else
echo "INTERFACE_GRAPHIQUE=0" >> $FICH_CONF
fi
#demande des paramètres par défaut
DOSS=$(zenity --file-selection --directory \
--title="Dossier à classer par défaut" \
--text="Quel est le dossier à classer par défaut")
echo -e "DIR_A_CLASSER_PAR_DEFAUT=\"$DOSS\"" >> $FICH_CONF
DOSS=$(zenity --file-selection --directory \
--title="Dossier déjà classé par défaut" \
--text="Quel est le dossier à classer par défaut")
echo -e "DIR_DEJA_CLASSE_PAR_DEFAUT=\"$DOSS\"" >> $FICH_CONF
echo -e "FICH_LOG=\"$FICH_LOG\"" >> $FICH_CONF
#ajout des scripts externe
nbse=0
Ajouter_script_externe()
{
if $(zenity --question --text="$nbse script\(s\) externe\(s\) existant\(s\) \n Voulez vous ajoutez un script externe?")
then
CHEMIN_FICHIER=$(zenity --file-selection \
--title="sélection du script supplémentaire" \
--text="Veuillez sélectionner le script supplémentaire")
if [ -x $CHEMIN_FICHIER ]
then
script_sup=$CHEMIN_FICHIER
echo -e "scripts_sup[${nbse}]='$script_sup'" >> $FICH_CONF
nbse=$(($nbse+1))
else
zenity --error \
--text="le script n'est pas valide : fichier non executable"
fi
Ajouter_script_externe
else
more $FICH_CONF
exit 0
fi
}
Ajouter_script_externe
}
#---------------------------------------------------
#l'interface du programme en lui meme
if [ ! -x $FICH_CONF ]
then
echo "fichier de configuration non trouvé"
echo "passage en mode configuration"
Configurer
fi
DIR_A_CLASSER="$DIR_A_CLASSER_PAR_DEFAUT"
DIR_DEJA_CLASSE="${DIR_DEJA_CLASSE_PAR_DEFAUT}"
while getopts "acd:e:t:" Option
do
case $Option in
a ) Annuler ;;
c ) Configurer ;;
d ) DIR_A_CLASSER="$OPTARG";;
e ) Appeller_script_ext $* ;;
t ) DIR_DEJA_CLASSE="$OPTARG" ;;
* ) echo "erreur"; exit 0 ;;
esac
done
maintenir_orga "$DIR_A_CLASSER" "${DIR_DEJA_CLASSE}"
si ca marche pas meme avec l'option -c, ca voudrait dire que mon code n'est pas portable...
ce serait super nul....
si cette version marche, je modifierais avec celui plus-haut
Dernière modification par yleetiny (Le 26/11/2007, à 21:26)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#16 Le 26/11/2007, à 21:31
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
bizarre, bizarre, je viens de copier le code que j'ai donné au post#1.
et chez moi, il fonctionne...
peux-tu mettre les messages d'erreurs stp?
EDIT>
oups, tu as déjà poster le message d'erreur.
Encore merci pour ton aide
pourrais-tu véririfié s'il existe un fichier "/tmp/classer.log" ou "$HOME/.classer.conf"
et les poster s'ils existent...
Dernière modification par yleetiny (Le 26/11/2007, à 21:41)
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#17 Le 26/11/2007, à 21:40
- U-topic
Re : [Script] [ABANDON] Maintenir un classement des fichiers
Yep celui la marche
EDIT: c'est quoi cette histoire de script externe
Dernière modification par U-topic (Le 26/11/2007, à 21:42)
Hors ligne
#18 Le 26/11/2007, à 21:43
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
cool, bon, j'avais remplacé que les bouts de code que j'avais changé....
je vais faire une vraie update et ne gardez que celui en développement.
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne
#19 Le 12/12/2007, à 18:59
- U-topic
Re : [Script] [ABANDON] Maintenir un classement des fichiers
Pas de nouvelles ?
Hors ligne
#20 Le 14/12/2007, à 02:33
- yleetiny
Re : [Script] [ABANDON] Maintenir un classement des fichiers
ah oui, j'avoue que j'ai mis le script de coté, parce qu'après mure réflexion il est pas très bien codé, et du coup les ajouts avancés devenaient problématiques.
Ayant un peu la flemme de tout refaire, j'ai laissé tombé, et puis comme ca ne tente pas tant de monde que ca je me suis dit que c'était pas une grosse perte.
En fait, c'est pas bien difficile, mais surtout très long (j'avais pensé à gérer plutot des listes de répertoires plutot que de simples répertoires, faire un peu tout)
ah oui, pour la liste de scripts externes: ben vu que certains de mes classement ne plaisent pas à tout le monde, j'avais laisser là possibilités à l'utilisateur de définir sont propres programme, le mien servant juste de relais, ce qui permet de lui rajouter des fonctionalités du style classement par mime ou autre.
En fait, à la fin de ma programmation, lorsque je me suis mis à faire l'interface, je me suis rendu compte, que le mieux c'était de :
1- laisser la liberté à l'utilisateur pour la configuration
2- permettre de faire un listing des classements à executer dans un ordre
3- l'utilisateur n'aurais qu'à lancer le programme configuré, comme il le souhaite
par contre ca demandait une réécriture assez poussée du code...alors j'avais laissé tombé.
en plus je me suis rendu compte que l'intégration graphique zenity possède très vite des limites et ce qui rend tout cela pas toujours convivial....
Après on peut aussi dire que meme si je code pas comme un cochon, je suis bien loin de faire des trucs clean à la manière d'un vrai développeur de scripts.
Si ca motive vraiment des personnes qu'elles se fassent connaître...
Ordinateurs : SONY VAIO C2Z/B & EEEPC 701
Merci de mettre [RESOLU] dans vos postes si le problème est réglé,
et Merci de partager vos expériences
Hors ligne