Y a-t-il sous bash une commande permettant de récupérer :
- le nom d'un fichier sans son extension ?
- l'extension d'un fichier sans son nom ?
- le chemin d'un fichier ?
Je souhaiterais en effet créer un petit script qui facilite la décompression
de fichiers OpenOffice .sxw
et je n'y connais rien en bash ...
Cela se présenterait comme cela :
#!/bin/sh
mkdir mon_fichier(sans l'extension) ;
cd mon_fichier(sans l'extension);
unzip mon_fichier.extension;
La seule chose que je sache est qu'un argument s'appelle avec $1 ...
Y a-t-il sous bash une commande permettant de récupérer :
Avec zsh, qui est infiniment meilleur que bash :
- le nom d'un fichier sans son extension ?
${fichier:r}
À combiner éventuellement avec :r, pour donner ${fichier:r:t}.
- l'extension d'un fichier sans son nom ?
${fichier:e}
- le chemin d'un fichier ?
${fichier:h}
Cf. zshexpn(1) pour plus de détails.
françois
Olivier V wrote:
Bonjour,
Bonjour,
Y a-t-il sous bash une commande permettant de récupérer : - le nom d'un fichier sans son extension ? - l'extension d'un fichier sans son nom ? - le chemin d'un fichier ?
Je souhaiterais en effet créer un petit script qui facilite la décompression de fichiers OpenOffice .sxw et je n'y connais rien en bash ...
man, google , librairie .....
Merci
Olivier V
Olivier V wrote:
Bonjour,
Bonjour,
Y a-t-il sous bash une commande permettant de récupérer :
- le nom d'un fichier sans son extension ?
- l'extension d'un fichier sans son nom ?
- le chemin d'un fichier ?
Je souhaiterais en effet créer un petit script qui facilite la décompression
de fichiers OpenOffice .sxw
et je n'y connais rien en bash ...
Y a-t-il sous bash une commande permettant de récupérer : - le nom d'un fichier sans son extension ? - l'extension d'un fichier sans son nom ? - le chemin d'un fichier ?
Je souhaiterais en effet créer un petit script qui facilite la décompression de fichiers OpenOffice .sxw et je n'y connais rien en bash ...
man, google , librairie .....
Merci
Olivier V
Olivier V
françois wrote:
google ...
Essayé et rien trouvé en dehors des commandes ordinaires (cp, cd ...)
françois wrote:
google ...
Essayé et rien trouvé en dehors des commandes ordinaires (cp, cd ...)
Essayé et rien trouvé en dehors des commandes ordinaires (cp, cd ...)
TiChou
Dans le message <news:, *Olivier V* tapota sur f.c.o.l.configuration :
Bonjour,
Bonsoir,
Y a-t-il sous bash une commande permettant de récupérer : - le nom d'un fichier sans son extension ? - l'extension d'un fichier sans son nom ? - le chemin d'un fichier ?
$ arg=/chemin/fichier.extension
En bash :
$ echo ${var##*/} fichier.extension
$ echo ${var%/*} /chemin
$ echo ${var%.*} /chemin/fichier
Avec les commandes 'basename' et 'dirname' :
$ basename "$var" fichier.extension
$ dirname "$var" /chemin
$ basename "$var" .extension fichier
Je souhaiterais en effet créer un petit script qui facilite la décompression de fichiers OpenOffice .sxw et je n'y connais rien en bash ...
Cela se présenterait comme cela :
#!/bin/sh mkdir mon_fichier(sans l'extension) ; cd mon_fichier(sans l'extension); unzip mon_fichier.extension;
#!/bin/sh
PATH="/usr/local/bin:/usr/bin:/bin"
[ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1
[ "${1%.*}.sxw" != "$1" ] && echo "$1 n'est pas un fichier .sxw" >&2 && exit 1
mkdir "${1%.sxw}" cd "${1%.sxw}" unzip "$1"
(non testé)
Merci
De rien.
-- TiChou
Dans le message <news:1336609.W8h6qrWNzt@news.free.fr>,
*Olivier V* tapota sur f.c.o.l.configuration :
Bonjour,
Bonsoir,
Y a-t-il sous bash une commande permettant de récupérer :
- le nom d'un fichier sans son extension ?
- l'extension d'un fichier sans son nom ?
- le chemin d'un fichier ?
$ arg=/chemin/fichier.extension
En bash :
$ echo ${var##*/}
fichier.extension
$ echo ${var%/*}
/chemin
$ echo ${var%.*}
/chemin/fichier
Avec les commandes 'basename' et 'dirname' :
$ basename "$var"
fichier.extension
$ dirname "$var"
/chemin
$ basename "$var" .extension
fichier
Je souhaiterais en effet créer un petit script qui facilite la
décompression de fichiers OpenOffice .sxw
et je n'y connais rien en bash ...
Cela se présenterait comme cela :
#!/bin/sh
mkdir mon_fichier(sans l'extension) ;
cd mon_fichier(sans l'extension);
unzip mon_fichier.extension;
#!/bin/sh
PATH="/usr/local/bin:/usr/bin:/bin"
[ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1
[ "${1%.*}.sxw" != "$1" ] && echo "$1 n'est pas un fichier .sxw" >&2 && exit
1
Dans le message <news:, *Olivier V* tapota sur f.c.o.l.configuration :
Bonjour,
Bonsoir,
Y a-t-il sous bash une commande permettant de récupérer : - le nom d'un fichier sans son extension ? - l'extension d'un fichier sans son nom ? - le chemin d'un fichier ?
$ arg=/chemin/fichier.extension
En bash :
$ echo ${var##*/} fichier.extension
$ echo ${var%/*} /chemin
$ echo ${var%.*} /chemin/fichier
Avec les commandes 'basename' et 'dirname' :
$ basename "$var" fichier.extension
$ dirname "$var" /chemin
$ basename "$var" .extension fichier
Je souhaiterais en effet créer un petit script qui facilite la décompression de fichiers OpenOffice .sxw et je n'y connais rien en bash ...
Cela se présenterait comme cela :
#!/bin/sh mkdir mon_fichier(sans l'extension) ; cd mon_fichier(sans l'extension); unzip mon_fichier.extension;
#!/bin/sh
PATH="/usr/local/bin:/usr/bin:/bin"
[ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1
[ "${1%.*}.sxw" != "$1" ] && echo "$1 n'est pas un fichier .sxw" >&2 && exit 1
mkdir "${1%.sxw}" cd "${1%.sxw}" unzip "$1"
(non testé)
Merci
De rien.
-- TiChou
TiChou
Dans le message <news:, *TiChou* tapota sur f.c.o.l.configuration :
#!/bin/sh ^^
#!/bin/bash serait préférable...
-- TiChou
Dans le message <news:polom.20041020214044@florizarre.tichou.org>,
*TiChou* tapota sur f.c.o.l.configuration :
#!/bin/sh mkdir --"${1%.sxw}" "--" #qui ne sert à rien ... unzip -d "${1%.sxw}" "--" "$1"
Mais à quoi cela servent les "--" ? Je ne vois par exemple rien dans le manuel de mkdir ...
Note que unzip creera le repertoire s'il n'existe pas de toutes facons avec "-d".
Effectivement ce qui suit fonctionne aussi :
#!/bin/sh unzip -d "${1%.sxw}" "--" "$1"
#!/bin/sh -
PATH=$(/usr/bin/getconf PATH)
if [ "$#" -ne 1 ]; then echo "Usage: ..." >&2 exit 1 fi
if [ ! -f "$1" ]; then printf >&2 '"%s" n'''est pas un fichier regulier' "$1" exit 1 fi
case $1 in *.sxw) if mkdir -- "${1%.sxw}"; then unzip -d "${1%.sxw}" -- "$1" else exit 1 fi;; *) printf >&2 '"%s" n'''est pas un fichier .sxw' "$1" exit 1;; esac
(pas testé)
Cela ne fonctionne pas, et je ne suis pas en mesure de corriger ... Pas d'erreur, mais rien en sortie.
Olivier V
Nicolas George
Olivier V wrote in message :
Mais à quoi cela servent les "--" ?
À faire en sorte que les arguments suivants soit considérés comme des arguments et pas des options. C'est pratique quand on veut supprimer un fichier qui s'appelle -rf (même si là, l'astuce terre à terre ./-rf fonctionne...).
Olivier V wrote in message <2424697.A0iStf1B07@news.free.fr>:
Mais à quoi cela servent les "--" ?
À faire en sorte que les arguments suivants soit considérés comme des
arguments et pas des options. C'est pratique quand on veut supprimer un
fichier qui s'appelle -rf (même si là, l'astuce terre à terre ./-rf
fonctionne...).
À faire en sorte que les arguments suivants soit considérés comme des arguments et pas des options. C'est pratique quand on veut supprimer un fichier qui s'appelle -rf (même si là, l'astuce terre à terre ./-rf fonctionne...).
TiChou
Dans le message <news:, *Stephane Chazelas* tapota sur f.c.o.l.configuration :
Par contre votre script modifié ne me donne rien en sortie : ??
#!/bin/bash [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1 [ "${1%.*}.sxw" != "$1" ] && echo "$1 n'est pas un fichier .sxw" >&2 && exit 1 mkdir "${1%.sxw}" unzip -d "${1%.sxw}" "$1" [...]
Rien d'etonnant. On veut s'economiser du temps en utilisant && et ||
Je ne vois pas en quoi... C'est une syntaxe couramment utilisé surtout dans le cas de test court et simple.
et ca devient moins lisible
Pour vous peut être.
et surtout ca ne marche pas.
Faudrait peut être nuancer... Ce n'est pas, l'utilisation de && et de || qui fait que ça ne fonctionne pas mais plutôt parce que j'ai commis une (petite) erreur dans mon code.
[ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1
doit etre lu:
( [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 ) && exit 1
Devrait plutôt être lu comme :
{ [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 ; } && exit 1
Non ?
Donc, le "exit 1" sera toujours executé.
Je corrige donc mon erreur :
[ -f "$1" ] || { echo "$1 n'est pas un fichier" >&2 ; exit 1 ; }
#!/bin/sh -
PATH=$(/usr/bin/getconf PATH)
if [ "$#" -ne 1 ]; then echo "Usage: ..." >&2 exit 1 fi
if [ ! -f "$1" ]; then printf > &2 '"%s" n'''est pas un fichier regulier' "$1"
printf > &2 '"%s" n'''est pas un fichier reguliern' "$1"
Vous vous souciez précédement de la lisibilité du code, point sur lequel je suis assez d'accord avec vous si on s'adresse à un débutant. Seulement je vois qu'ici vous faites usage de la commande 'printf', qui certes a ses avantages dans de nombreux cas mais guère ici. Pensez-vous alors que la syntaxe de la commande 'printf' est ici beaucoup plus lisible que la commande echo ? Où est-ce juste un excès de zèle ? ;)
-- TiChou
Dans le message <news:slrncnfb2a.1ls.stephane.chazelas@spam.is.invalid>,
*Stephane Chazelas* tapota sur f.c.o.l.configuration :
Par contre votre script modifié ne me donne rien en sortie : ??
#!/bin/bash
[ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1
[ "${1%.*}.sxw" != "$1" ] && echo "$1 n'est pas un fichier .sxw" >&2 &&
exit 1 mkdir "${1%.sxw}" unzip -d "${1%.sxw}" "$1"
[...]
Rien d'etonnant. On veut s'economiser du temps en utilisant && et ||
Je ne vois pas en quoi... C'est une syntaxe couramment utilisé surtout dans
le cas de test court et simple.
et ca devient moins lisible
Pour vous peut être.
et surtout ca ne marche pas.
Faudrait peut être nuancer... Ce n'est pas, l'utilisation de && et de || qui
fait que ça ne fonctionne pas mais plutôt parce que j'ai commis une (petite)
erreur dans mon code.
[ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1
doit etre lu:
( [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 ) && exit 1
Devrait plutôt être lu comme :
{ [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 ; } && exit 1
Non ?
Donc, le "exit 1" sera toujours executé.
Je corrige donc mon erreur :
[ -f "$1" ] || { echo "$1 n'est pas un fichier" >&2 ; exit 1 ; }
#!/bin/sh -
PATH=$(/usr/bin/getconf PATH)
if [ "$#" -ne 1 ]; then
echo "Usage: ..." >&2
exit 1
fi
if [ ! -f "$1" ]; then
printf > &2 '"%s" n'''est pas un fichier regulier' "$1"
printf > &2 '"%s" n'''est pas un fichier reguliern' "$1"
Vous vous souciez précédement de la lisibilité du code, point sur lequel je
suis assez d'accord avec vous si on s'adresse à un débutant. Seulement je
vois qu'ici vous faites usage de la commande 'printf', qui certes a ses
avantages dans de nombreux cas mais guère ici. Pensez-vous alors que la
syntaxe de la commande 'printf' est ici beaucoup plus lisible que la
commande echo ? Où est-ce juste un excès de zèle ? ;)
Dans le message <news:, *Stephane Chazelas* tapota sur f.c.o.l.configuration :
Par contre votre script modifié ne me donne rien en sortie : ??
#!/bin/bash [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1 [ "${1%.*}.sxw" != "$1" ] && echo "$1 n'est pas un fichier .sxw" >&2 && exit 1 mkdir "${1%.sxw}" unzip -d "${1%.sxw}" "$1" [...]
Rien d'etonnant. On veut s'economiser du temps en utilisant && et ||
Je ne vois pas en quoi... C'est une syntaxe couramment utilisé surtout dans le cas de test court et simple.
et ca devient moins lisible
Pour vous peut être.
et surtout ca ne marche pas.
Faudrait peut être nuancer... Ce n'est pas, l'utilisation de && et de || qui fait que ça ne fonctionne pas mais plutôt parce que j'ai commis une (petite) erreur dans mon code.
[ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 && exit 1
doit etre lu:
( [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 ) && exit 1
Devrait plutôt être lu comme :
{ [ -f "$1" ] || echo "$1 n'est pas un fichier" >&2 ; } && exit 1
Non ?
Donc, le "exit 1" sera toujours executé.
Je corrige donc mon erreur :
[ -f "$1" ] || { echo "$1 n'est pas un fichier" >&2 ; exit 1 ; }
#!/bin/sh -
PATH=$(/usr/bin/getconf PATH)
if [ "$#" -ne 1 ]; then echo "Usage: ..." >&2 exit 1 fi
if [ ! -f "$1" ]; then printf > &2 '"%s" n'''est pas un fichier regulier' "$1"
printf > &2 '"%s" n'''est pas un fichier reguliern' "$1"
Vous vous souciez précédement de la lisibilité du code, point sur lequel je suis assez d'accord avec vous si on s'adresse à un débutant. Seulement je vois qu'ici vous faites usage de la commande 'printf', qui certes a ses avantages dans de nombreux cas mais guère ici. Pensez-vous alors que la syntaxe de la commande 'printf' est ici beaucoup plus lisible que la commande echo ? Où est-ce juste un excès de zèle ? ;)