[HS]parametre de script

Le
Remi Suinot
bonsoir à tous,
je suis en train de faire un script, ou l'utilisateur passe en nom de fichi=
er en entrée:
~/bin/convert.sh toto.rm
j'ai utilisé ceci pour récupérer le nom du fichier sans l'extension:
nom=`echo $1 | cut -d "." -f 1 `
Ca marche, . sauf quand je donne à manger ceci:
~/bin/convert.sh ./toto.rm
là, c'est le bazard à cause du point au début!
comment faire autrement que cut?
Il y a certainement mieux à faire, mais je n'ai pas trouvé (pas assez c=
herché?)

Merci de vos avis.
Rémi.

PS: le script converti du *.rm en *.mp3 sans passer par un fichier temporai=
re.

--
Merci de m'avoir lu jusqu'ici, longue Vie et Prosperite.
http://www.suinot.org
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Serge Cavailles
Le #9517011
Le Lundi 05 Mars 2007 21:19, Remi Suinot a écrit :
bonsoir à tous,


Bonjour,

je suis en train de faire un script, ou l'utilisateur passe en nom de
fichier en entrée: ~/bin/convert.sh toto.rm
j'ai utilisé ceci pour récupérer le nom du fichier sans l'extension:
nom=`echo $1 | cut -d "." -f 1 `
Ca marche, .... sauf quand je donne à manger ceci:
~/bin/convert.sh ./toto.rm
là, c'est le bazard à cause du point au début!
comment faire autrement que cut?
Il y a certainement mieux à faire, mais je n'ai pas trouvé (pas assez
cherché?)


Pourquoi ne pas utiliser un autre délimiteur que le point?

--
Serge
Cédric Lucantis
Le #9516981
Le lundi 5 mars 2007 21:19, Remi Suinot a écrit :
bonsoir à tous,
je suis en train de faire un script, ou l'utilisateur passe en nom de
fichier en entrée: ~/bin/convert.sh toto.rm
j'ai utilisé ceci pour récupérer le nom du fichier sans l'extension:
nom=`echo $1 | cut -d "." -f 1 `
Ca marche, .... sauf quand je donne à manger ceci:
~/bin/convert.sh ./toto.rm
là, c'est le bazard à cause du point au début!
comment faire autrement que cut?
Il y a certainement mieux à faire, mais je n'ai pas trouvé (pas assez
cherché?)

Merci de vos avis.
Rémi.

PS: le script converti du *.rm en *.mp3 sans passer par un fichier
temporaire.



une solution spécifique à bash (je crois) : nom="${1%.*}"

(l'operateur % supprime le plus court suffixe correspondant au motif)

attention, un fichier sans extension te donnera des resultats bizarres, par
exemple './toto.dir/tata' renverra './toto' Tu peux éviter ça en utilis ant
basename/dirname

une autre avec sed (même probleme) : nom=`echo "$1" | sed 's,..*$,,g'`

si le fichier à toujours l'extension rm, tu peux aussi faire
nom=`basename "$1" '.rm'`

--
Cédric Lucantis
Remi Suinot
Le #9516961
En ce Mon, 5 Mar 2007 21:27:35 +0100, le sermon de Serge Cavailles
Le Lundi 05 Mars 2007 21:19, Remi Suinot a écrit :
> bonsoir à tous,
Bonjour,

> je suis en train de faire un script, ou l'utilisateur passe en nom de
> fichier en entrée: ~/bin/convert.sh toto.rm
> j'ai utilisé ceci pour récupérer le nom du fichier sans l'extensi on:
> nom=`echo $1 | cut -d "." -f 1 `
> Ca marche, .... sauf quand je donne à manger ceci:
> ~/bin/convert.sh ./toto.rm
> là, c'est le bazard à cause du point au début!
> comment faire autrement que cut?
> Il y a certainement mieux à faire, mais je n'ai pas trouvé (pas ass ez
> cherché?)
Pourquoi ne pas utiliser un autre délimiteur que le point?



pour couper le nom et enlever la partie ".rm", c'est plus pratique, car
si je passe autre chose que du rm, seule le point sera toujours là.

Rémi.

--
Merci de m'avoir lu jusqu'ici, longue Vie et Prosperite.
http://www.suinot.org
Jean-Michel OLTRA
Le #9516951
Bonjour,


Le lundi 05 mars 2007, Remi Suinot a écrit...


Ca marche, .... sauf quand je donne à manger ceci:
~/bin/convert.sh ./toto.rm
là, c'est le bazard à cause du point au début!
comment faire autrement que cut?



Utiliser `basename` avant le cut ?

--
jm

A.E.L. Sarl (R.C.S CASTRES 490843240)
http://www.affaires-en-ligne.com



--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Serge Cavailles
Le #9516891
Le Lundi 05 Mars 2007 21:30, Remi Suinot a écrit :
En ce Mon, 5 Mar 2007 21:27:35 +0100, le sermon de Serge Cavailles


> Pourquoi ne pas utiliser un autre délimiteur que le point?

pour couper le nom et enlever la partie ".rm", c'est plus pratique, car
si je passe autre chose que du rm, seule le point sera toujours là.



Oups, je m'en suis rendu compte de ma bétise le temps que le mail rentre :P

On peut supprimer un éventuel point en début de nom avec sed, avant le cut.

sed 's/^.//'

--
Serge
Jacques L'helgoualc'h
Le #9516871
Cédric Lucantis a écrit, lundi 5 mars 2007, à 21:36 :
Le lundi 5 mars 2007 21:19, Remi Suinot a écrit :
> bonsoir à tous,



bonsoir,

> je suis en train de faire un script, ou l'utilisateur passe en nom de
> fichier en entrée: ~/bin/convert.sh toto.rm
> j'ai utilisé ceci pour récupérer le nom du fichier sans l'extension:
> nom=`echo $1 | cut -d "." -f 1 `


[...]

une solution spécifique à bash (je crois) : nom="${1%.*}"



Bah non, ça marche aussi avec sh, zsh, dash --- mais pas (t)csh, tout de
même :)

(l'operateur % supprime le plus court suffixe correspondant au motif)

attention, un fichier sans extension te donnera des resultats bizarres, par
exemple './toto.dir/tata' renverra './toto' Tu peux éviter ça en utilisant
basename/dirname



ou encore

chemin="${1%/*}"
nom="${1##*/}"
base_nom="${nom%.*}"

# ou plus précis et direct,
nom_mp3="${nom%.rm}.mp3"


,---- Lu sur la liste linux-nantes :
| Pour les amoureux du bash, voici un basename en bash qui fonctionnera au
| moins 10x (*) plus vite (parce qu'on ne lance pas de processus) :
|
| function basename2() { local f=${1##*/}; echo ${f%$2}; }
|
| Le deuxième effet bashcool, c'est que la commande
| $ mon_basename fic '.*'
| enlèvera n'importe quelle extension, ce que ne sait pas faire basename
|
| Xavier Hienne
|
| (*) 25x chez moi - YMMV
`----

une autre avec sed (même probleme) : nom=`echo "$1" | sed 's,..*$,,g'`



sans le problème,

sed -e 's,.[^.]*,,' # ou + au lieu de *, pour garder un point final.

--
Jacques L'helgoualc'h


--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Bruno Berteau
Le #9516861
Remi Suinot a écrit :
En ce Mon, 5 Mar 2007 21:27:35 +0100, le sermon de Serge Cavailles

Le Lundi 05 Mars 2007 21:19, Remi Suinot a écrit :

bonsoir à tous,



Bonjour,


je suis en train de faire un script, ou l'utilisateur passe en nom de
fichier en entrée: ~/bin/convert.sh toto.rm
j'ai utilisé ceci pour récupérer le nom du fichier sans l'extension:
nom=`echo $1 | cut -d "." -f 1 `
Ca marche, .... sauf quand je donne à manger ceci:
~/bin/convert.sh ./toto.rm
là, c'est le bazard à cause du point au début!
comment faire autrement que cut?
Il y a certainement mieux à faire, mais je n'ai pas trouvé (pas assez
cherché?)



Pourquoi ne pas utiliser un autre délimiteur que le point?




pour couper le nom et enlever la partie ".rm", c'est plus pratique, car
si je passe autre chose que du rm, seule le point sera toujours là.




Bonsoir,

J'ai trouvé ça qui à l'air de bien fonctionner

nom=`dirname $1`"/"`basename $1 | sed 's/..*$//'`

Par contre si tu as 2 points dans le nom du fichier tout ce qui est
après le 1er sera supprimé. Par exemple ./fichier.01.rm donnera ./fichier

Si l'extension est toujours .rm tu peux aussi utiliser

nom=`echo $1 | sed 's/.rm$//i'`

@+

--
Bruno Berteau
http://b.berteau.free.fr



--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.net/?DebianFrench
Vous pouvez aussi ajouter le mot ``spam'' dans vos champs "From" et
"Reply-To:"

To UNSUBSCRIBE, email to
with a subject of "unsubscribe". Trouble? Contact
Remi Suinot
Le #9516831
En ce Mon, 5 Mar 2007 22:13:38 +0100, le sermon de Jacques L'helgoualc'h
Cédric Lucantis a écrit, lundi 5 mars 2007, à 21:36 :
> Le lundi 5 mars 2007 21:19, Remi Suinot a écrit :
> > bonsoir à tous,

bonsoir,

> > je suis en train de faire un script, ou l'utilisateur passe en nom de
> > fichier en entrée: ~/bin/convert.sh toto.rm
> > j'ai utilisé ceci pour récupérer le nom du fichier sans l'exten sion:
> > nom=`echo $1 | cut -d "." -f 1 `
[...]
>
> une solution spécifique à bash (je crois) : nom="${1%.*}"

Bah non, ça marche aussi avec sh, zsh, dash --- mais pas (t)csh, tout de
même :)

> (l'operateur % supprime le plus court suffixe correspondant au motif)
>
> attention, un fichier sans extension te donnera des resultats bizarres, par
> exemple './toto.dir/tata' renverra './toto' Tu peux éviter ça en ut ilisant
> basename/dirname

ou encore

chemin="${1%/*}"
nom="${1##*/}"
base_nom="${nom%.*}"

# ou plus précis et direct,
nom_mp3="${nom%.rm}.mp3"



Merci à tous pour vos exemple.
Je vais garder cette solution, avec chemin/nom/base_nom

Amicalement.
Rémi.

--
Merci de m'avoir lu jusqu'ici, longue Vie et Prosperite.
http://www.suinot.org ou http://linuxette.suinot.org
Publicité
Poster une réponse
Anonyme