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 22/01/2007, à 15:43

hdiamant

Débutant : question de script bash

Bonjour,

J'ai un peu honte de poser des questions de béotien ici mais faut bien commencer ! La première partie du script que je voudrais écrire est chargée de récupérer le nom d'un fichier sélectionné et propose de le renommer. Voilà ce que j'ai écrit:

# Récupérer le nom du fichier sélectionné

	files0=`echo "$1" | sed 's/ /\?/g'`

	files1=`zenity --entry --title="Renommer le fichier?" --text="Renommez le fichier $1, s'il vous plaît" | sed 's/ /\-/g' --entry­-text="$1"`

	mv $files0 $files1

Je vois deux problèmes :

1) files0 comprend l'extension du fichier, or je ne voudrais pas modifier l'extension du fichier, ni avoir à la récrire;

2) zenity ne m'affiche pas files0 (dans le cas où je ne voudrais pas réécrire mon fichier) .

Merci d'avance pour vos lumières.

Dernière modification par hdiamant (Le 22/01/2007, à 15:44)

Hors ligne

#2 Le 22/01/2007, à 16:16

Doby

Re : Débutant : question de script bash

Plop...

En voila une question qu'elle est bonne tongue
Alors pour ton grand bonheur une petite fonction qui s'appelle basename existe. Elle te permet de récupérer le nom de ton fichier privé de l'extension. Ca c'est possible uniquement si tu connais le nom de ton fichier... ca donne a peux pres ca :

file=`basename toto.jpg .jpg`

Et maintenant $file contient toto

Maintenant si tu ne connais pas l'extension de ton fichier, il suffit de prendre les 4 dernieres lettres du nom du fichier smile
Pour ce faire, il faut d'une part récupérer l'extension et de l'autre le nom du fichier...Ca peut donner quelque chose comme ca :

name=`echo "$1" | cut -d"." -f1`
extend=`echo "$1" | cut -d"." -f2`
files1=$name.$extend

Et c'est gagné....

Sinon pour la seconde partie de ta question voici la reponse :

zenity --entry --title="Renommer le fichier?" --text="Renommez le fichier "$1", s'il vous plaît" --entry-text="$1"

Dernière modification par Doby (Le 22/01/2007, à 16:17)


Software is like Sex, it's better when it's Free

Hors ligne

#3 Le 22/01/2007, à 16:42

hdiamant

Re : Débutant : question de script bash

Excellent !

mais pour être sûr d'avoir bien compris l'usage de cut :

Code:

name=`echo "$1" | cut -d"." -f1`
extend=`echo "$1" | cut -d"." -f2`
files1=$name.$extend

-f1 signifie le premier terme avant "." ? et -f2 le second terme?

Que se passe-t-il s'il y a plusieurs points dans le fichier?

Hors ligne

#4 Le 22/01/2007, à 17:09

Doby

Re : Débutant : question de script bash

Ouais tu as bien compris le role de la commande cut...
Bah en general il n'y a qu'un seul point pour un nom de fichier et si tu ne met pas d'espaces pour la séparation des mots ce sont des _ donc a priri ca marche tout le temps...

Je vais regarder si y a pas une commande toute faite pour ca mais j'en doute

Sinon l'avantage de la methode c'est que c'est utilisable aussi en php en C etc.


Software is like Sex, it's better when it's Free

Hors ligne

#5 Le 22/01/2007, à 17:12

Doby

Re : Débutant : question de script bash

Bon apres une recherche assez rapide il ne semble aps y avoir d'autre méthode ...


Software is like Sex, it's better when it's Free

Hors ligne

#6 Le 22/01/2007, à 17:53

hdiamant

Re : Débutant : question de script bash

Eurêka !

Je déplore juste une chose, je n'ai pas réussi à conserver des espaces. Mais ça me va très bien comme ça.

Voici donc mon premier script !!!!

#!/bin/bash

# Récupérer le nom du fichier sélectionné et son extension
   
    name=`echo "$1" | cut -d"." -f1`
    extend=`echo "$1" | cut -d"." -f2`
    files1=`echo "$name.$extend" | sed 's/ /\?/g'`
   

    mv $files1 `zenity --entry --title="Renommer le fichier?" --text="Renommez le fichier "$1", s'il vous plaît" --entry-text="$files1"| sed 's/ /\-/g'`.$extend


   
exit

Dernière modification par hdiamant (Le 22/01/2007, à 17:55)

Hors ligne

#7 Le 22/01/2007, à 18:04

hdiamant

Re : Débutant : question de script bash

J'ai crié Eurêka trop vite.

mon script ne marche qu'en console lorsque je me trouve dans le bon répertoire.

Il est sans effet lorsque je le lance par le menu de nautilus.

Là, je suis perdu !

Hors ligne

#8 Le 22/01/2007, à 18:06

Doby

Re : Débutant : question de script bash

Ah tui veux le lancer a partir de Nautilus...
Pour ca il faut que tu le déplace dans le fichier

~/.gnome2/nautilus-scripts/nom_de_ton_script

Enfin ca c'est mes souvenirs qui me le rappelle tongue Sinon en recherchant sur le forum avec nautilus script tu devrais trouver ton bonheur.


Software is like Sex, it's better when it's Free

Hors ligne

#9 Le 22/01/2007, à 18:18

hdiamant

Re : Débutant : question de script bash

Il y est et il fonctionne, sauf que la commande mv ne fonctionne pas. Pour plus de clarté, je l'ai réécrit comme ça :

# Récupérer le nom du fichier sélectionné et son extension
	
	name=`echo "$1" | cut -d"." -f1`
	extend=`echo "$1" | cut -d"." -f2`
	file0=`echo "$name.$extend" | sed 's/ /\?/g'`
	
	file1=`zenity --entry --title="Renommer le fichier?" --text="Renommez le fichier "$1", s'il vous plaît" --entry-text="$file0"| sed 's/ /\-/g'`

# La fenêtre suivante sert à vérifier que jusque là les variables ont bien été comprises. et ça marche.	
	zenity --info --title "Résultat" --text "$file1.$extend" 
	
	mv $file0 $file1.$extend
exit

Mais ça ne marche qu'en ligne de commande, bizarre.

Dernière modification par hdiamant (Le 22/01/2007, à 18:23)

Hors ligne

#10 Le 23/01/2007, à 01:10

hdiamant

Re : Débutant : question de script bash

J'ai réglé le problème : c'était l'expression

| sed 's/ /\?/g'`

qui était en trop !

Hors ligne

#11 Le 23/01/2007, à 15:31

Doby

Re : Débutant : question de script bash

Ok c'est bon a savoir ...
En general je n'utilise aps les expressions regulires avec sed sachant que si tu passe ta variable avec "$ta_variable", les carateres tels que les espaces ou uatres sont pris en compte de facon bien plus naturelle tongue


Software is like Sex, it's better when it's Free

Hors ligne