Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 21/02/2009, à 18:06

WhiteFox

treezen...un petit script

Salut les ubuntistes.
Voilà le contexte : hier un ami me demande s'il existe un logciel capable de générer un fichier text contenant toute l'arborescence d'un dossier précédemment choisit.
N'en connaissant pas je me suis mis à chercher et j'ai trouvé "tree". Seulement voilà cet ami est allergique à la ligne de commande et "tree" est un programme devinez quoi...en ligne de commande.
Ni une ni deux j'apprends le bash et je lui fais une interface graphique !:|
Oui ça fait un peu vantard big_smile, je n'ai pas appris TOUT le bash, seulement les bases pour faire ce dont j'avais besoin et l'interface graphique c'est du zenity tout facile.
Bref, voilà ma petite contribution au logiciel libre :
2 scripts :
l'un pour ubuntu et probablement les autres dérivés de debian permet de vous informé s'il manque une dépendance (au nombre de deux : zenity et tree) si vous le lancez en mode terminal, il utilise dpkg et grep pour ce faire.
Si toutes les dépendances sont satisfaites il vous affichera l'interface zenity (une fenêtre pour choisir si on veut aussi afficher les fichiers en plus des dossiers dans l'arbre généré, la suivante pour choisir le dossier à partir duquel on veut générer l'arborescence, et enfin une fenêtre pour choisir la destination du fichier résultant)

#!/bin/bash

##############################################
################## TREEZEN ######################
##########################################by Fox
# Script de génération d'arborescence.
#Ce script est sous license GNU/GPL version 3.0 et supérieures.
#Vous pouvez donc le copier, le modifier, le donner, le vendre même si vous y parvenez,
#mais chaque copie ou copie modifiée sera alors soumise à la même license.
# Pour des questions ou des infos : croustinewser@croustinews.org
# Dépendances :
# tree
# zenity
#####################################################################################

function letstart()
{
oui="afficher les fichiers"
non="afficher uniquement les dossiers"
titre1="voulez-vous lister les dossiers ET les fichiers ?"
titre2="Choisissez un dossier à parcourir"
titre3="Choisissez la cible où sera enregistré le fichier texte résultant"
size="--height= 220"

action=`zenity --list --title "$titre1" --radiolist --column="Choix" --column "Action" TRUE "$oui" FALSE "$non" "$size"`
chemin=`zenity --file-selection --title="$titre2" --directory`
final=`zenity --file-selection --title="$titre3" --save`

case $action in
 "$oui")
  tree $chemin >> $final.txt
  ;;
 "$non")
  tree -d $chemin >> $final.txt
  ;;
 *)
  exit
  ;;
esac
}

installed="Status: install ok installed"
statutree=`dpkg -s tree | grep Status`
statuzen=`dpkg -s zenity | grep Status`

case $statuzen in
 "$installed")
  case $statutree in
 "$installed")
  letstart
  ;;
 *)
  echo "Il semblerait que tree ne soit pas installé. Pour l'installer tapez : sudo apt-get install tree (sous ubuntu)"
  sleep 10
  ;;
esac
  ;;
 *)
  echo "Il semblerait que zenity ne soit pas installé. Pour l'installer tapez : sudo apt-get install zenity (sous ubuntu)"
  sleep 10
  ;;
esac

L'autre fait la même chose mais ne gère pas les dépendances du tout (si vous ne les avez pas il marche pas) mais il fonctionne sur toutes les distributions linux (normalement)

#!/bin/bash

##############################################
############### TREEZENLOLO ##################
########################################by Fox
# Script de génération d'arborescence.
#Ce script est sous license GNU/GPL version 3.0 et supérieures.
#Vous pouvez donc le copier, le modifier, le donner, le vendre même si vous y parvenez,
#mais chaque copie ou copie modifiée sera alors soumise à la même license.
# Pour des questions ou des infos : croustinewser@croustinews.org
# Dépendances :
# tree
# zenity
#####################################################################################

function letstart()
{
oui="afficher les fichiers"
non="afficher uniquement les dossiers"
titre1="voulez-vous lister les dossiers ET les fichiers ?"
titre2="Choisissez un dossier à parcourir"
titre3="Choisissez la cible où sera enregistré le fichier texte résultant"
size="--height= 220"

action=`zenity --list --title "$titre1" --radiolist --column="Choix" --column "Action" TRUE "$oui" FALSE "$non" "$size"`
chemin=`zenity --file-selection --title="$titre2" --directory`
final=`zenity --file-selection --title="$titre3" --save`

case $action in
 "$oui")
  tree $chemin >> $final.txt
  ;;
 "$non")
  tree -d $chemin >> $final.txt
  ;;
 *)
  exit
  ;;
esac
}

letstart

Voilà, ne m'en voulez pas si le code n'est pas très beau, c'est la première fois que je fais du bash.
Comme vous pouvez le constater ces 2 scripts sont sous licence GNU/GPL, donc amusez-vous.
Enregistrez les dans un fichier texte portant l'extension .sh (par exemple treezen.sh et treezenlolo.sh) rendez les exécutables et profitez en.
Je suis ouvert à toute suggestion d'amélioration (la première étant d'en faire des version "script-nautilus accessibles via le clique droit de la souris et agissant sur le dossier courant).


Microsoft : microsize your mind !

Hors ligne

#2 Le 10/03/2009, à 14:26

soupaloignon

Re : treezen...un petit script

Sympa ton script smile

Mais est ce que les 2 fenêtres zenity ne sont pas de trop ? On peut suposer que lorsque l'on veut lister un répertoire on est déjà dedans, donc le chemin est déjà défini. De même il paraitrait logique de sauvegarder cette liste dans le répertoire en question, avec un nom prédéterminé.
Ce qui est beaucoup plus rapide.

Genre un

cd $NAUTILUS_SCRIPT_CURRENT_URI

tree >> liste

Enfin, ce ne sont que des propositions. En tout cas ton script est très utile.

Dernière modification par soupaloignon (Le 10/03/2009, à 14:48)


==> Libérez les huitres du bassin d'Arcachon <==

Hors ligne

#3 Le 12/03/2009, à 01:20

WhiteFox

Re : treezen...un petit script

En fait, c'est vrai que ta méthode est plus rapide et plus simple (la mienne passe pour une usine à gaz à côté:lol:) mais je trouve (ainsi que le mec qui m'avait demandé ce script) qu'elle est moins flexible.
Ce script permet de lister le contenu du fichier courant...mais pas que:)
Et de même il permet de sauvegarder cet arbre dans le répertoire courant...mais pas que:)
Enfin pour le nom prédéterminé c'est encore une fois pour laisser le maximum de choix à l'utilisateur final.
Sans pousser jusqu'à créer une GUI à "tree" (qui propose bien plus de fonctionnalités que ce script), je voulais laisser un choix assez large à l'utilisateur afin qu'il ne soit pas limité à sauver l'arbre du répertoire courant dans le répertoire courant sous le nom "liste.txt", je voulais qu'il puisse tout choisir.
Et enfin...je voulais apprendre un peu le bash;), donc faire plus compliqué était aussi dans mon intérêt je ne le cache pas.
Cependant ta version est beaucoup plus légère et s'adapte du coup à un script nautilus...
Que voilà : [Edit...un peu plus bas]
P.S. : Ravi qu'il te soit utile.
Merci soupaloignon.
Comme tu peux le voir, il est quand même un tout petit peu compliqué, mais il est fait pour installer les dépendances en cas de manque et proposer l'affichage des fichiers et répertoires ou répertoires uniquement.
Testé chez moi, à copier dans /home/votre_répertoire/.gnome2/nautilus-scripts et ça roule.
prochaine étape : script de feignant : il s'installera tout seul dans /home/votre_répertoire/.gnome2/nautilus-scripts et vous n'aurez rien à faire big_smile

C'est chose faite, maintenant il s'agit d'un script nautilus à part entière, et voici le récapitulatif des fonctions de ce script :
V1.0.n
Génère dans le répertoire courant un fichier texte contenant l'arborescence de ce même répertoire.
Affiche une fenêtre pour choisir d'afficher répertoires et fichiers ou uniquement les répertoires dans le fichier final.
Affiche une fenêtre en cas de réussite précisant le chemin du fichier généré.
Affiche une fenêtre dans le cas contraire, informant de la fin du script.
V1.1.n
Installe les dépendances (tree et zenity) en cas de absence de ses dernières et se relance après l'installation.
V1.2.n
Le script s'installe tout seul dans le dossier des scripts de nautilus et supprime son installeur (ne reste que le script dans le dossier des scripts nautilus.
Todo :
Amélioration et simplification du code.
Trouver un endroit où héberger ce script...parce que directement sur le forum...c'est moche.

#!/bin/bash

##############################################
################## TREEZEN ######################
##########################################by Fox
# Script de génération d'arborescence.
#Ce script est sous license GNU/GPL version 3.0 et supérieures.
#Vous pouvez donc le copier, le modifier, le donner, le vendre même si vous y parvenez,
#mais chaque copie ou copie modifiée sera alors soumise à la même license.
# Pour des questions ou des infos : croustinewser@croustinews.org
# Dépendances :
# tree
# zenity
#####################################################################################

function makit()
{
echo '#!/bin/bash

##############################################
################## TREEZEN ######################
##########################################by Fox
# Script de génération d'\''arborescence.
#Ce script est sous license GNU/GPL version 3.0 et supérieures.
#Vous pouvez donc le copier, le modifier, le donner, le vendre même si vous y parvenez,
#mais chaque copie ou copie modifiée sera alors soumise à la même license.
# Pour des questions ou des infos : croustinewser@croustinews.org
# Dépendances :
# tree
# zenity
#####################################################################################

function letstart()
{
oui="afficher les fichiers"
non="afficher uniquement les dossiers"
titre1="voulez-vous lister les dossiers ET les fichiers ?"
size="--height= 220"

action=`zenity --list --title "$titre1" --radiolist --column="Choix" --column "Action" TRUE "$oui" FALSE "$non" "$size"`

case $action in
 "$oui")
  cd $NAUTILUS_SCRIPT_CURRENT_URI
  tree >> treezénération.txt
  zenity --info --text="voilou c'\''est fait $NAUTILUS_SCRIPT_CURRENT_URI/treezénération.txt ;-)"
  ;;
 "$non")
  cd $NAUTILUS_SCRIPT_CURRENT_URI
  tree -d >> treezénération.txt
  zenity --info --text="voilou c'\''est fait $NAUTILUS_SCRIPT_CURRENT_URI/treezénération.txt ;-)"
  ;;
 *)
  zenity --info --text="Bon bein tant pis :-("
  exit
  ;;
esac
}

installed="Status: install ok installed"
statutree=`dpkg -s tree | grep Status`
statuzen=`dpkg -s zenity | grep Status`

case $statuzen in
 "$installed")
  case $statutree in
 "$installed")
  letstart
  ;;
 *)
  gksudo apt-get install tree
  letstart
  ;;
esac
  ;;
 *)
  gksudo apt-get install zenity
  letstart
  ;;
esac' >> $HOME/.gnome2/nautilus-scripts/mini-treezen.sh
chmod +x $HOME/.gnome2/nautilus-scripts/mini-treezen.sh
}
if test -x $HOME/.gnome2/nautilus-scripts/mini-treezen.sh; then
  echo 'Le script existe déjà'
  zenity --info --text="Le script existe déjà"
  sleep 10
else
  makit
  echo "le script s'est installé confortablement, suppression de l'installeur(mais non pas vous...):-)"
  zenity --info --text="le script s'est installé confortablement, suppression de l'installeur(mais non pas vous...):-)"
  rm -rf $0
  sleep 10
fi

Dernière modification par WhiteFox (Le 12/03/2009, à 04:37)


Microsoft : microsize your mind !

Hors ligne