OVH Cloud OVH Cloud

Magicien du script sous shell

7 réponses
Avatar
Jean Frédéric FARNY
'Jour

Est-ce que qq'1 aurait sous la main un script shell (tcsh si possible) qui
aurait la bonne idée de rajouter une extension à un fichier si celui-ci n'en
a pas (le choix de l'extension se ferait a partir de l'info de la commande
file sur le dit fichier ?

En héritage de OS9 je récupère une bonne quantité de fichiers sans extension
et c'est plutôt .ordelique...

Merci d'avance
--
Pour m'envoyer un mail, enlevez le substra et vous aurez le mel ;o)

7 réponses

Avatar
Stephane Chazelas
2004-09-30, 14:38(+02), Jean Frédéric FARNY:
'Jour

Est-ce que qq'1 aurait sous la main un script shell (tcsh si possible) qui
aurait la bonne idée de rajouter une extension à un fichier si celui-ci n'en
a pas (le choix de l'extension se ferait a partir de l'info de la commande
file sur le dit fichier ?
[...]


#! /usr/bin/zsh -
autoload -U zmv || exit
typeset -A ext
ext=(
image/jpeg jpg
text/html html
text/plain txt
)
zmv -Q '(**/)(^*.*)(^/)' '$f.${ext[$(file -bi -- $f)]-unknown}'

--
Stephane

Avatar
patpro ~ patrick proniewski
In article ,
Stephane Chazelas wrote:

2004-09-30, 14:38(+02), Jean Frédéric FARNY:
'Jour

Est-ce que qq'1 aurait sous la main un script shell (tcsh si possible) qui
aurait la bonne idée de rajouter une extension à un fichier si celui-ci n'en
a pas (le choix de l'extension se ferait a partir de l'info de la commande
file sur le dit fichier ?
[...]


#! /usr/bin/zsh -
autoload -U zmv || exit
typeset -A ext
ext=(
image/jpeg jpg
text/html html
text/plain txt
)
zmv -Q '(**/)(^*.*)(^/)' '$f.${ext[$(file -bi -- $f)]-unknown}'



ha ben... zsh ça calme quand meme.

patpro

--
je cherche un poste d'admin UNIX/Mac
http://patpro.net/cv.php


Avatar
Saïd
patpro ~ patrick proniewski :

ha ben... zsh ça calme quand meme.



Ca fait huit ans que je m'en sers et il continue a m'etonner. :)

--
Saïd.
C programmers never die - they're just cast into void.

Avatar
Jean Frédéric FARNY
Le 30/09/04 16:07, dans , « Saïd »
a écrit :

patpro ~ patrick proniewski :

ha ben... zsh ça calme quand meme.



Ca fait huit ans que je m'en sers et il continue a m'etonner. :)
Y a pas photo, merci pour l'helper ;)


JFF
--
Pour m'envoyer un mail, enlevez le substra et vous aurez le mel ;o)


Avatar
Jean Frédéric FARNY
Le 30/09/04 15:35, dans ,
« Stephane Chazelas » a écrit :

2004-09-30, 14:38(+02), Jean Frédéric FARNY:
'Jour

Est-ce que qq'1 aurait sous la main un script shell (tcsh si possible) qui
aurait la bonne idée de rajouter une extension à un fichier si celui-ci n'en
a pas (le choix de l'extension se ferait a partir de l'info de la commande
file sur le dit fichier ?
[...]


#! /usr/bin/zsh -
autoload -U zmv || exit
typeset -A ext
ext=(
image/jpeg jpg
text/html html
text/plain txt
)
zmv -Q '(**/)(^*.*)(^/)' '$f.${ext[$(file -bi -- $f)]-unknown}'
J'ai du mal avec la dernière phrase... Faut-il passer des arguments et si

oui, comment ? (j'ai pas man dans mon zsh qui n'a jamais été exploré à ce
jour, quelque réminiscence de FreeBSD en 2.5 ;)

JFF
--
Pour m'envoyer un mail, enlevez le substra et vous aurez le mel ;o)


Avatar
Stephane Chazelas
2004-09-30, 16:37(+02), Jean Frédéric FARNY:
[...]
#! /usr/bin/zsh -
autoload -U zmv || exit
typeset -A ext
ext=(
image/jpeg jpg
text/html html
text/plain txt
)



Un tableau associatif qui fait correspondre le type mime a
l'extension du fichier (je suppose que ton "file -bi -- fichier"
renvoie cette information).

zmv -Q '(**/)(^*.*)(^/)' '$f.${ext[$(file -bi -- $f)]-unknown}'


J'ai du mal avec la dernière phrase... Faut-il passer des arguments et si
oui, comment ? (j'ai pas man dans mon zsh qui n'a jamais été exploré à ce
jour, quelque réminiscence de FreeBSD en 2.5 ;)


Ca traite les fichiers (les non-repertoires) dans le repertoire
courant et les sous-repertoires.

zmv est une fonction de zsh, decrite a
http://zsh.sunsite.dk/Guide/zshguide05.html#l143

Son premier parametre est un "glob pattern" etendu de zsh:

Dans:

**/^*.*(^/)

**/: 0 ou plus niveaux de sous-repertoire:
^*.*: tous les noms de fichiers qui ne contiennent pas de .
(^/): tout type de fichier sauf repertoire

Oublie les parentheses autour de **/..., elles ne servent a
rien.

Le deuxieme parametre est comment on va renommer chaque fichier
($f).

${ext[$(file -bi -- $f)]-unknown}, c'est
${ext[<type-mime-de-$f>]-unknown}, c'est a dire l'extension
correspondant au <type-mime-de-$f> ou "unknown" s'il n'y a pas
d'entree dans $ext pour ce <type-mime-de-$f>.

Je t'encourage a passer l'option "-n" a zmv dans un premier
temps pour verifier qu'elle fonctionne correctement.

--
Stephane


Avatar
Jean Frédéric FARNY
Le 30/09/04 16:57, dans ,
« Stephane Chazelas » a écrit :

2004-09-30, 16:37(+02), Jean Frédéric FARNY:
[...]
#! /usr/bin/zsh -
autoload -U zmv || exit
typeset -A ext
ext=(
image/jpeg jpg
text/html html
text/plain txt
)



Un tableau associatif qui fait correspondre le type mime a
l'extension du fichier (je suppose que ton "file -bi -- fichier"
renvoie cette information).

zmv -Q '(**/)(^*.*)(^/)' '$f.${ext[$(file -bi -- $f)]-unknown}'


J'ai du mal avec la dernière phrase... Faut-il passer des arguments et si
oui, comment ? (j'ai pas man dans mon zsh qui n'a jamais été exploré à ce
jour, quelque réminiscence de FreeBSD en 2.5 ;)


Ca traite les fichiers (les non-repertoires) dans le repertoire
courant et les sous-repertoires.

zmv est une fonction de zsh, decrite a
http://zsh.sunsite.dk/Guide/zshguide05.html#l143

Son premier parametre est un "glob pattern" etendu de zsh:

Dans:

**/^*.*(^/)

**/: 0 ou plus niveaux de sous-repertoire:
^*.*: tous les noms de fichiers qui ne contiennent pas de .
(^/): tout type de fichier sauf repertoire

Oublie les parentheses autour de **/..., elles ne servent a
rien.

Le deuxieme parametre est comment on va renommer chaque fichier
($f).

${ext[$(file -bi -- $f)]-unknown}, c'est
${ext[<type-mime-de-$f>]-unknown}, c'est a dire l'extension
correspondant au <type-mime-de-$f> ou "unknown" s'il n'y a pas
d'entree dans $ext pour ce <type-mime-de-$f>.

Je t'encourage a passer l'option "-n" a zmv dans un premier
temps pour verifier qu'elle fonctionne correctement.


Merci beaucoup, c'est limpide

JFF

--
Pour m'envoyer un mail, enlevez le substra et vous aurez le mel ;o)