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 28/07/2008, à 18:32

omnimax

besoin d'aide pour un nautilus script

Bonjour,

j'aimerai savoir comment récupérer le chemin complet et le nom du fichier lorsqu'on effectue un clic droit sur celui-ci

exemple je clique droit sur lossier images de vacances dans home, et le script me retournerait

/home/toto/images_de_vacances

Dernière modification par greg2007 (Le 29/07/2008, à 17:02)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#2 Le 28/07/2008, à 19:56

WW

Re : besoin d'aide pour un nautilus script

Salut,

C'est pour faire un script nautilus?? Si oui c'est juste stocké dans le tableau $*.
Pour le premier paramètre utilise $1.

Sinon dis nous dans quel langage tu travaille??


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#3 Le 28/07/2008, à 22:18

omnimax

Re : besoin d'aide pour un nautilus script

oui merci c'est en bash pour nautilus scripts, mais je ne comprends pas bien ton explication


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#4 Le 29/07/2008, à 08:00

omnimax

Re : besoin d'aide pour un nautilus script

parce que si je suis ton raisonnement, je devrais voir apparaitre dans xterm mon fichier (je fais le test sur mon bureau)

essai avec $1

#!/bin/bash

xterm 'echo $1'

exit 0

essai avec $*

#!/bin/bash

xterm 'echo $*'

exit 0

hors, ce qui apparait est juste l'endroit où je me situe, et non le nom du fichier/et ou dossier

ad875bbcf5c65d1a22b653a251667t.jpg

Dernière modification par greg2007 (Le 29/07/2008, à 08:04)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#5 Le 29/07/2008, à 10:04

WW

Re : besoin d'aide pour un nautilus script

Salut,

J'ai fais des tests en fait si tu fais juste :

#!/bin/sh
zenity --info --text="chemin : $1"
exit 0;

Il te renvoie juste le nom du fichier car le chemin est relatif (si tu fais des traitements le script trouvera le fichier car pour le lancer l'utilisateur fais un clic droit sur le fichier ce qui permet au script d'avoir le "bon" chemin relatif) pas très claire peut être:P

Si tu veux le chemin absolu tu fais :

#!/bin/sh
zenity --info --text="chemin : $PWD/$1"
exit 0;

Là il récupère c'est où tu es c'est le but de la variable d'environement $PWD (path work directory) puis il concatène "/" + le nom de ton fichier à la fin.


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#6 Le 29/07/2008, à 10:31

omnimax

Re : besoin d'aide pour un nautilus script

je confirme ça marche MAIS

ce que je voudrais c'est récupérer le nom du fichier pour l'inclure dans une autre commande....en fait je ne veux pas que zenity m'affiche le nom

je voudrais pouvoir assigner $ à la variable du fichier

d'ailleurs ce que je ne comprends pas c'est que ta ligne reprend le même principe que ma ligne plus haut et pourtant avec echo ça ne renvoit rien, alors qu'avec zenity on a le résultat....

Où est l'erreur?

tu comprends si avec echo je sais que j'ai un résultat, alors la commande marche et il me sera alors facile de récupérer la donnée avec la commande cut

Dernière modification par greg2007 (Le 29/07/2008, à 10:33)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#7 Le 29/07/2008, à 10:50

WW

Re : besoin d'aide pour un nautilus script

"je voudrais pouvoir assigner $ à la variable du fichier" -> là c'est moi qui comprends pas.
Tu veux un truc du genre $images_de_vacances = /home/toto/images_de_vacances.

J'ai essayé avec gnome-terminal -x ... ça marchais sauf qu'il ouvrait la fenêtre et la refermé aussi tôt. C'est peut être pareil avec xterm.

Et le nom du fichier tu l'as dans $PWD/$1 donc si tu veux le récupérer pour une autre commande tu fais

monFichier="$PWD/$1"

Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#8 Le 29/07/2008, à 11:05

omnimax

Re : besoin d'aide pour un nautilus script

tu as raison et pour en être sur j'ai écrit ceci pour prendre la dernière commande dans l'historique de la console et ça marche

#!/bin/bash

echo "chemin : $1" >> ~/.bash_history
xterm

exit 0

merci pour ton aide big_smile


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#9 Le 29/07/2008, à 11:15

WW

Re : besoin d'aide pour un nautilus script

De rien, n'oubli pas de le passer en [Résolu].


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#10 Le 29/07/2008, à 11:33

omnimax

Re : besoin d'aide pour un nautilus script

encore juste une question


en fait le but est de faire :

mv -i $PWD/$1 $destination

comment faire pour que s'y il y a un fichier qui porte le même nom dans le répertoire, une boite zenity apparaisse demandant de confirmer ou non l'écrasement de ce fichier
oui : confirme
non :arrête le script

et qu'a contrario si aucun fichier ne porte le même nom, la commande s'effectue sans rien afficher du tout(pas de zenity)?

ce sont des questions basiques (les soluces sont sur la doc) mais si tu m'expliquais dans ce cas présent ce serait plus parlant pour moi, si tu sais expliquer juste les 2 possibilités,

pour afficher zénity pas de problème je connais

Dernière modification par greg2007 (Le 29/07/2008, à 11:34)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#11 Le 29/07/2008, à 11:36

omnimax

Re : besoin d'aide pour un nautilus script

en fait ce script existe tout fait mais j'aimerai le créer moi-même pour comprendre chacune des choses que je mets en place smile

Dernière modification par greg2007 (Le 29/07/2008, à 11:37)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#12 Le 29/07/2008, à 12:37

omnimax

Re : besoin d'aide pour un nautilus script

en fait le script est le suivant pour l'instant:

#!/bin/bash

destination=`zenity --title="choisir le dossier pour déplacer" --file-selection --directory`

mv -i $PWD/$1 $destination

exit 0

mais il me manque les lignes de codes stipulant que faire si un fichier existe déja (d'ailleurs le script ne marche pas si pareil cas se présente)

deuxio il manque aussi l'éventualité que l'on arrive pas à déplacer ou renommer le fichier pour une question de droits, là encore il faudrait être averti via du zenity


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#13 Le 29/07/2008, à 12:52

WW

Re : besoin d'aide pour un nautilus script

Il faut tester la présence du fichier dans le répertoire de destination avec

if [ ! -e $destination/$1 ]

Code complet :

#!/bin/sh

destination="$HOME"
chemin="$PWD/$1" # On récupère le chemin absolu du fichier (marche pour les fenêtres nautilus, pas pour le Bureau directement, par contre on peux à partir de $HOME/Desktop)
if [ ! -e $destination/$1 ]; then # Si le fichier n'existe pas dans destination
	mv $chemin $destination # on le déplace
else # Sinon
	zenity --question --title="~ Ecraser ~" --text="Le fichier $1 existe déjà dans $destination. Voulez-vous l'écraser ?" # On pose la question
	if [ $? = "0" ]; then # Si la réponse est oui
		mv -f $chemin $destination # On écrase
	fi
fi
exit 0;

Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#14 Le 29/07/2008, à 14:48

omnimax

Re : besoin d'aide pour un nautilus script

merci beaucoup, j'ai bien compris
cette page m'a d'ailleurs beaucoup aidé à comprendre tes lignes
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP2003/tp03.html

if [ $? = "0" ] signifie donc valider

j'ai adapté à mes goûts en conservant le choix via zenity parce que sinon $home l'envoit n'importe où dans mon home

#!/bin/bash

destination=`zenity --title="choisir le dossier" --file-selection --directory`

chemin="$PWD/$1"
if [ ! -e $destination/$1 ]; then
	mv $chemin $destination
else
	zenity --question --title="Attention" --text="Le fichier $1 existe déjà
	Voulez-vous l'écraser ?"
	if [ $? = "0" ]; then
		mv -f $chemin $destination
	fi

fi

exit 0;

je l'utilise donc uniquement avec nautilus puisque directement via le bureau cela ne marche pas

mais je ne comprends pas pourquoi ce n'est pas possible, parce que  si on prends un fichier du bureau

sa localisation est pourtant bien /home/toto/Desktop/fichier

donc pourquoi ne veut-il pas le déplacer?

Dernière modification par greg2007 (Le 29/07/2008, à 14:50)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#15 Le 29/07/2008, à 15:14

WW

Re : besoin d'aide pour un nautilus script

Pour if [ $? = "0" ] :
$? contient le résultat de la dernière commande exécutée or dans notre cas la ligne qui précède est : zenity --question --title="Attention" --text="Le fichier $1 existe déjà
    Voulez-vous l'écraser ?"
Quand l'utilisateur clique sur Annuler le résultat sera 1 et quand il clique sur valider le résultat sera 0.

Pour "sa localisation est pourtant bien /home/toto/Desktop/fichier" : Oui, mais si tu fais des tests tu verra que la valeur renvoyée par un clic droit est /home/toto/Desktop certainement à cause d'une question de focus.
Lorsque tu clique sur un fichier du Bureau c'est le Bureau qui à le focus et non Nautilus.
Même si le Bureau est dans l'arborescence de Nautilus.
Le Bureau est un dossier spécial, par exemple lorsque tu utilise nautilus-open-terminal (un script nautilus justement) directement sur le Bureau il t'ouvre le terminal dans ton home(comportement par défaut). Alors quand passant par Raccourcis>Bureau puis open-terminal il ouvre ~/Desktop.

Edit : J'allais oublier : http://abs.traduc.org/abs-5.3-fr/

Dernière modification par WW (Le 29/07/2008, à 15:15)


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#16 Le 29/07/2008, à 15:33

omnimax

Re : besoin d'aide pour un nautilus script

ok j'ai compris, j'ai même essayé de faire la solution inverse : le copiers vers en m'inspirant des arguments que j'avais trouvés sur la page que j'avais citée plus haut

le code est le suivant mais ne fonctionne pas, tu peux me dire pour quelle raison ? je crois pourtant avoir tout respecté dans la structure du script

#!/bin/bash

destination=`zenity --title="choisir le dossier pour copier" --file-selection --directory`

chemin="$PWD/$1"

if [ ! -e $destination/$1 ]; then
	cp $chemin $destination
else
	if [ ! $chemin -nt $destination/$1 ]; then
		zenity --question --title="remplacer" --text="$1 est plus récent que la destination.
		voulez-vous le remplacer?"
		if [ $? = "0" ]; then
		cp -f $chemin $destination
		fi
	else [ ! $chemin -ot $destination/$1 ]; then
		zenity --question --title="remplacer" --text="$1 est plus ancien que la destination.
		voulez-vous le remplacer?"
		if [ $? = "0" ]; then
		cp -f $chemin $destination
		fi
	
fi

exit 0;

Dernière modification par greg2007 (Le 29/07/2008, à 15:34)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#17 Le 29/07/2008, à 15:38

omnimax

Re : besoin d'aide pour un nautilus script

et merci pour la page...et si tu en as marre de me répondre, je comprendrais aussi, pas de soucis d'autant que tu m'as super aidé aujourd'hui

si tu connais pas, en cadeau pour te remercier, un super site pour de très beaux fond d'écran(il y en a pour tous les gouts):

http://interfacelift.com/wallpaper_beta/downloads/date/any/

Dernière modification par greg2007 (Le 29/07/2008, à 15:41)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#18 Le 29/07/2008, à 16:07

WW

Re : besoin d'aide pour un nautilus script

Je vais plus avoir le temps de t'aider aujourd'hui mais déjà il te manque un if ici : else [ ! $chemin -ot $destination/$1 ]; then

elif [ ! $chemin -ot $destination/$1 ]; then

Merci, pour les wallpaper. wink


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#19 Le 30/07/2008, à 12:49

omnimax

Re : besoin d'aide pour un nautilus script

j'ai mofifié comme ceci mais cela ne marche touhours pas....je comprends vraiment pas....

ps j'adore ton message de profil, il ya beaucoup de gens qui oublient qu'ils ont été débutant...en plus débutant ou confirmé face  àla titegoogle ça veut rien dire wink

#!/bin/bash

destination=`zenity --title="choisir le dossier pour copier" --file-selection --directory`

chemin="$PWD/$1"

if [ ! -e $destination/$1 ]; then
    cp $chemin $destination
else
    if [ ! $chemin -nt $destination/$1 ]; then
        zenity --question --title="remplacer" --text="$1 est plus récent que la destination.
        voulez-vous le remplacer?"
        if [ $? = "0" ]; then
        cp -f $chemin $destination
        fi
    elif [ ! $chemin -ot $destination/$1 ]; then
        zenity --question --title="remplacer" --text="$1 est plus ancien que la destination.
        voulez-vous le remplacer?"
        if [ $? = "0" ]; then
        cp -f $chemin $destination
    fi
    
fi

exit 0;

Dernière modification par greg2007 (Le 30/07/2008, à 15:42)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#20 Le 30/07/2008, à 12:52

omnimax

Re : besoin d'aide pour un nautilus script

quel est la signication d'ELIF : ou bien?

et Else : ou encore?


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#21 Le 30/07/2008, à 12:53

omnimax

Re : besoin d'aide pour un nautilus script

dans la doc il me semblait qu'il y avait une commande pour situer dans quelle ligne se situait l'erreur dans le script mais je ne retrouve plus cet article et idem sur google sad:(:(:(

Dernière modification par greg2007 (Le 30/07/2008, à 12:53)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#22 Le 30/07/2008, à 21:10

WW

Re : besoin d'aide pour un nautilus script

Salut,

Je ne fesais que passer, je testerai ton code demain.
Et if -> si
    then -> alors
    else -> sinon
    elif ou else if -> sinon si (tu remets une condition)
Ya pas forcément que deux choix donc ca peut faire :
if CONDITION1 then # Premier cas intéressant
  TRAITEMENT1
elif CONDITION2 then # Second cas intéressant
  TRAITEMENT2
...
elif CONDITIONX then # X-ième cas intéressant
  TRAITEMENTX
else #Pour tous les autres cas
  TRAITEMENT3
fi


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#23 Le 01/08/2008, à 18:42

WW

Re : besoin d'aide pour un nautilus script

Bon je comprends pas mon interpréteur shell, il arrive à interpréter ce script différement lors de deux exécutions successives. Mais il m'a fait beaucoup de choses étrange aujourd'hui. Je vérifirais plus tard :

#!/bin/sh

remplacer() { # Ceci est une déclaration de fonction. En bash (sh) les fonctions sont justes des blocs de code appelé plus loin
	zenity --question --title="Remplacer" --text="$1 est plus récent que celui de la destination. Voulez-vous le remplacer?" # Je centralise ce traitement car il apparaissait deux fois, il faut abuser des fonctions.

	if [ $? = "0" ]
		then cp -f $1 $2 # Pour récupérer les arguments de ta fonction tu utilise le tableau $# qui va de $1 à $9
	fi
}

destination=$(zenity --file-selection --directory --title="choisir le dossier pour copier")
if [ "$destination" = "" ]; then # L'utilisateur à cliquer sur annuler
	echo "Annulation" # On affiche dans le terminal la cause de la fin du processus ici Annulation de l'utilisateur
	exit 0;
else
	chemin=$PWD/$1
	copieFichier="$destination/"$1
	if [ ! -e $copieFichier ]
		then cp $chemin $destination
	elif [ $chemin -ot $copieFichier ]
		then remplacer $chemin $destination # On appelle la fonction
	else
		remplacer $chemin $destination # Idem
	fi
fi
exit 0;

Dernière modification par WW (Le 02/08/2008, à 16:10)


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne

#24 Le 01/08/2008, à 19:21

omnimax

Re : besoin d'aide pour un nautilus script

(ok d'ac parce que là franco je comprends pas trop)


14.04 unity et Linux Mint KDE 13 zsh-meilleur shell   script fire

Hors ligne

#25 Le 02/08/2008, à 16:12

WW

Re : besoin d'aide pour un nautilus script

Ajout de commentaire dans mon post précédent.


Quand on sait c'est facile, mais qui n'a jamais été débutant.

Hors ligne