Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[HS]parametre de script

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

Merci de vos avis.
R=E9mi.

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

--=20
Merci de m'avoir lu jusqu'ici, longue Vie et Prosperite.
http://www.suinot.org

8 réponses

Avatar
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?

--
Serge
Avatar
Cédric Lucantis
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
Avatar
Remi Suinot
En ce Mon, 5 Mar 2007 21:27:35 +0100, le sermon de Serge Cavailles <debserg contenait:

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
Avatar
Jean-Michel OLTRA
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
Avatar
Serge Cavailles
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


contenait:
> 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
Avatar
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'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
Avatar
Bruno Berteau
Remi Suinot a écrit :
En ce Mon, 5 Mar 2007 21:27:35 +0100, le sermon de Serge Cavailles contenait:


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
Avatar
Remi Suinot
En ce Mon, 5 Mar 2007 22:13:38 +0100, le sermon de Jacques L'helgoualc'h <l hh+ contenait:

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