Pages : 1
#1 Le 22/01/2007, à 14: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, à 14:44)
Hors ligne
#2 Le 22/01/2007, à 15:16
- Doby
Re : Débutant : question de script bash
Plop...
En voila une question qu'elle est bonne
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
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, à 15:17)
Software is like Sex, it's better when it's Free
Hors ligne
#3 Le 22/01/2007, à 15: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, à 16: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, à 16: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, à 16: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, à 16:55)
Hors ligne
#7 Le 22/01/2007, à 17: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, à 17: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 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, à 17: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, à 17:23)
Hors ligne
#10 Le 23/01/2007, à 00: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, à 14: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
Software is like Sex, it's better when it's Free
Hors ligne