Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.
Je voudrais renommer les fichiers dont le numéro est inférieur
à 100 afin que ce numéro soit représenté sur trois chiffres :
photo007.png et photo013.png. Je sais le faire en générant un
script (grâce à vim) contenant tous les « mv » qui vont bien,
mais je suis sûr que ça doit pouvoir se faire en une ligne de
shell (ou peut-être deux, une pour les nombres à un chiffre
et une pour les nombres à deux chiffres).
Quelqu'un saurait me dire comment faire ?
Note : par défaut j'utilise bash, mais si c'est plus simple je
peux lancer un autre shell.
Juste histoire de chipoter quand même, pour l'exemple demandé il m'aurait fallu faire deux corrections à ton script : - remplacer « jpg » par « png »
:%s/.jpg/.png/gc
- supprimer la ligne « (( j < 1000 )) && k=0$k » (elle fait des nombres à quatre chiffres et non à trois chiffres).
/1000<ESC>dd
Merci en tout cas !
;)
:wq
-- Hugues Hiegel [http://www.hiegel.fr/~hugues/]
Antoine Leca
nshag écrivit :
On 13 fév, 12:25, Antoine Leca wrote:
écrivit :
sed -n 'h;s/[0-9][0-9]/0 /;t out;s/[0-9]/00 /;: out;H;g;s/(.*)n/mv 1 /p'
Ceci utilise un certain nombre d'extensions GNU, n'est-ce pas ? ( ; qui n'appartient pas à une étiquette, synonyme de &)
pour la backref oui elle est absente des BRE, le semicolon devenant separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
Et les sed(1) actuels de FreeBSD, NetBSD, ucbcmd ou Interix/SUA, par exemple, n'implémentent pas cette extension pour :, b et t ; OpenBSD de son côté l'a incorporé « comme d'autres sed font » en octobre 2003, http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/sed/compile.c#rev1.16
Antoine
nshag écrivit :
On 13 fév, 12:25, Antoine Leca wrote:
shagou...@hotmail.com écrivit :
sed -n 'h;s/[0-9][0-9]/0 /;t out;s/[0-9]/00 /;: out;H;g;s/(.*)n/mv 1 /p'
Ceci utilise un certain nombre d'extensions GNU, n'est-ce pas ?
( ; qui n'appartient pas à une étiquette, synonyme de &)
pour la backref oui elle est absente des BRE, le semicolon devenant
separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
Et les sed(1) actuels de FreeBSD, NetBSD, ucbcmd ou Interix/SUA, par
exemple, n'implémentent pas cette extension pour :, b et t ; OpenBSD de
son côté l'a incorporé « comme d'autres sed font » en octobre 2003,
http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/sed/compile.c#rev1.16
sed -n 'h;s/[0-9][0-9]/0 /;t out;s/[0-9]/00 /;: out;H;g;s/(.*)n/mv 1 /p'
Ceci utilise un certain nombre d'extensions GNU, n'est-ce pas ? ( ; qui n'appartient pas à une étiquette, synonyme de &)
pour la backref oui elle est absente des BRE, le semicolon devenant separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
Et les sed(1) actuels de FreeBSD, NetBSD, ucbcmd ou Interix/SUA, par exemple, n'implémentent pas cette extension pour :, b et t ; OpenBSD de son côté l'a incorporé « comme d'autres sed font » en octobre 2003, http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/sed/compile.c#rev1.16
Antoine
nshag
On 14 fév, 08:49, Antoine Leca wrote:
> pour la backref oui elle est absente des BRE, le semicolon devenant > separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
et pour cause elles attendent toutes des arguments et/ou sont terminales, hors lorsqu'il précède la commande suivante le semicolon se retrouve après l'argument s'il y a lieu et non après le command verb, il reprend ainsi son rôle habituel. Ce n'est pas une "extension GNU", :; est de toute façon d'un intérêt très limité et les labels undefined.
ceci dit rien nempêche de composer le oneliner a grand coup de -e multiples mais j'intervenais dans le contexte pour le moins GNU (bash) de la question originale et sur l'utilisation de multiples instances et non de multiples commandes "passées à"/de sed :)
On 14 fév, 08:49, Antoine Leca <r...@localhost.invalid> wrote:
> pour la backref oui elle est absente des BRE, le semicolon devenant
> separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
et pour cause elles attendent toutes des
arguments et/ou sont terminales, hors lorsqu'il
précède la commande suivante le semicolon
se retrouve après l'argument s'il y a lieu et
non après le command verb, il reprend
ainsi son rôle habituel. Ce n'est pas une
"extension GNU", :; est de toute façon d'un
intérêt très limité et les labels undefined.
ceci dit rien nempêche de composer le
oneliner a grand coup de -e multiples mais
j'intervenais dans le contexte pour le moins
GNU (bash) de la question originale et sur
l'utilisation de multiples instances et non de
multiples commandes "passées à"/de sed :)
> pour la backref oui elle est absente des BRE, le semicolon devenant > separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
et pour cause elles attendent toutes des arguments et/ou sont terminales, hors lorsqu'il précède la commande suivante le semicolon se retrouve après l'argument s'il y a lieu et non après le command verb, il reprend ainsi son rôle habituel. Ce n'est pas une "extension GNU", :; est de toute façon d'un intérêt très limité et les labels undefined.
ceci dit rien nempêche de composer le oneliner a grand coup de -e multiples mais j'intervenais dans le contexte pour le moins GNU (bash) de la question originale et sur l'utilisation de multiples instances et non de multiples commandes "passées à"/de sed :)
Antoine Leca
nshag écrivit :
ceci dit rien n’empêche de composer le oneliner a grand coup de -e multiples mais j'intervenais dans le contexte pour le moins GNU (bash) de la question originale et sur l'utilisation de multiples instances et non de multiples commandes "passées à"/de sed :)
Oh, aucun problème pour moi ; je voulais juste attirer l'attention d'éventuelles passants sur le fait que ton joli script pouvait mal fonctionner sur certaines machines (comme la mienne en fait)
Antoine
nshag écrivit :
ceci dit rien n’empêche de composer le
oneliner a grand coup de -e multiples mais
j'intervenais dans le contexte pour le moins
GNU (bash) de la question originale et sur
l'utilisation de multiples instances et non de
multiples commandes "passées à"/de sed :)
Oh, aucun problème pour moi ; je voulais juste attirer l'attention
d'éventuelles passants sur le fait que ton joli script pouvait mal
fonctionner sur certaines machines (comme la mienne en fait)
ceci dit rien n’empêche de composer le oneliner a grand coup de -e multiples mais j'intervenais dans le contexte pour le moins GNU (bash) de la question originale et sur l'utilisation de multiples instances et non de multiples commandes "passées à"/de sed :)
Oh, aucun problème pour moi ; je voulais juste attirer l'attention d'éventuelles passants sur le fait que ton joli script pouvait mal fonctionner sur certaines machines (comme la mienne en fait)
Antoine
Cyrille Lefevre
Le 14/02/2012 09:49, Antoine Leca a écrit :
nshag écrivit :
On 13 fév, 12:25, Antoine Leca wrote:
écrivit :
sed -n 'h;s/[0-9][0-9]/0 /;t out;s/[0-9]/00 /;: out;H;g;s/(.*)n /mv 1 /p'
Ceci utilise un certain nombre d'extensions GNU, n'est-ce pas ? ( ; qui n'appartient pas à une étiquette, synonyme de&)
pour la backref oui elle est absente des BRE, le semicolon devenant separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
Et les sed(1) actuels de FreeBSD, NetBSD, ucbcmd ou Interix/SUA, par exemple, n'implémentent pas cette extension pour :, b et t ; OpenBSD de son côté l'a incorporé « comme d'autres sed font » en octobre 2003, http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/sed/compile.c#rev1.16
Bonjour,
juste 2 patches de 2002 !
http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/41159 [patch] new sed(1) -c option to allow ; as a separator for b, t and : functions
http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/41190 [patch] sed(1) report the { linenum instead of EOF linenum on pending }
10 ans et toujours pas commité, pas mal...
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
Le 14/02/2012 09:49, Antoine Leca a écrit :
nshag écrivit :
On 13 fév, 12:25, Antoine Leca wrote:
shagou...@hotmail.com écrivit :
sed -n 'h;s/[0-9][0-9]/0 /;t out;s/[0-9]/00 /;: out;H;g;s/(.*)n /mv 1 /p'
Ceci utilise un certain nombre d'extensions GNU, n'est-ce pas ?
( ; qui n'appartient pas à une étiquette, synonyme de&)
pour la backref oui elle est absente des BRE, le semicolon devenant
separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
Et les sed(1) actuels de FreeBSD, NetBSD, ucbcmd ou Interix/SUA, par
exemple, n'implémentent pas cette extension pour :, b et t ; OpenBSD de
son côté l'a incorporé « comme d'autres sed font » en octobre 2003,
http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/sed/compile.c#rev1.16
Bonjour,
juste 2 patches de 2002 !
http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/41159
[patch] new sed(1) -c option to allow ; as a separator for b, t and :
functions
http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/41190
[patch] sed(1) report the { linenum instead of EOF linenum on pending }
10 ans et toujours pas commité, pas mal...
Cordialement,
Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%nospam@laposte.net.invalid
supprimer "%nospam% et ".invalid" pour me repondre.
sed -n 'h;s/[0-9][0-9]/0 /;t out;s/[0-9]/00 /;: out;H;g;s/(.*)n /mv 1 /p'
Ceci utilise un certain nombre d'extensions GNU, n'est-ce pas ? ( ; qui n'appartient pas à une étiquette, synonyme de&)
pour la backref oui elle est absente des BRE, le semicolon devenant separateur lorsqu'il precede une commande est par contre POSIX.
... sauf lorsqu'il suit {, a, b, c, i, r, t, w, : ou #
Et les sed(1) actuels de FreeBSD, NetBSD, ucbcmd ou Interix/SUA, par exemple, n'implémentent pas cette extension pour :, b et t ; OpenBSD de son côté l'a incorporé « comme d'autres sed font » en octobre 2003, http://www.openbsd.org/cgi-bin/cvsweb/src/usr.bin/sed/compile.c#rev1.16
Bonjour,
juste 2 patches de 2002 !
http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/41159 [patch] new sed(1) -c option to allow ; as a separator for b, t and : functions
http://www.freebsd.org/cgi/query-pr.cgi?pr=bin/41190 [patch] sed(1) report the { linenum instead of EOF linenum on pending }
10 ans et toujours pas commité, pas mal...
Cordialement,
Cyrille Lefevre. -- mailto:Cyrille.Lefevre-news% supprimer "%nospam% et ".invalid" pour me repondre.
meta
La commande à utiliser pour les numéros à 1 chiffre (à adapter pour les numéros à 2 chiffres) serait:
sed -e "s/photo([0-7]).png/photo001.png"
Je n'ai pas le temps de vous écrire la totale mais c'est l'idée. C'est ce que vous avez du faire sous vim de toutes façons ?
"Olivier Miakinen" a écrit dans le message de groupe de discussion : jg6bp2$1bp3$
Bonjour,
Soit un répertoire comportant des fichiers nommés par exemple photo7.png, photo13.png, photo239.png ou photo3535.png.
Je voudrais renommer les fichiers dont le numéro est inférieur à 100 afin que ce numéro soit représenté sur trois chiffres : photo007.png et photo013.png. Je sais le faire en générant un script (grâce à vim) contenant tous les « mv » qui vont bien, mais je suis sûr que ça doit pouvoir se faire en une ligne de shell (ou peut-être deux, une pour les nombres à un chiffre et une pour les nombres à deux chiffres).
Quelqu'un saurait me dire comment faire ?
Note : par défaut j'utilise bash, mais si c'est plus simple je peux lancer un autre shell.
Cordialement, -- Olivier Miakinen
La commande à utiliser pour les numéros à 1 chiffre (à adapter pour les
numéros à 2 chiffres) serait:
sed -e "s/photo([0-7]).png/photo001.png"
Je n'ai pas le temps de vous écrire la totale mais c'est l'idée. C'est ce
que vous avez du faire sous vim de toutes façons ?
"Olivier Miakinen" a écrit dans le message de groupe de discussion :
jg6bp2$1bp3$1@cabale.usenet-fr.net...
Bonjour,
Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.
Je voudrais renommer les fichiers dont le numéro est inférieur
à 100 afin que ce numéro soit représenté sur trois chiffres :
photo007.png et photo013.png. Je sais le faire en générant un
script (grâce à vim) contenant tous les « mv » qui vont bien,
mais je suis sûr que ça doit pouvoir se faire en une ligne de
shell (ou peut-être deux, une pour les nombres à un chiffre
et une pour les nombres à deux chiffres).
Quelqu'un saurait me dire comment faire ?
Note : par défaut j'utilise bash, mais si c'est plus simple je
peux lancer un autre shell.
La commande à utiliser pour les numéros à 1 chiffre (à adapter pour les numéros à 2 chiffres) serait:
sed -e "s/photo([0-7]).png/photo001.png"
Je n'ai pas le temps de vous écrire la totale mais c'est l'idée. C'est ce que vous avez du faire sous vim de toutes façons ?
"Olivier Miakinen" a écrit dans le message de groupe de discussion : jg6bp2$1bp3$
Bonjour,
Soit un répertoire comportant des fichiers nommés par exemple photo7.png, photo13.png, photo239.png ou photo3535.png.
Je voudrais renommer les fichiers dont le numéro est inférieur à 100 afin que ce numéro soit représenté sur trois chiffres : photo007.png et photo013.png. Je sais le faire en générant un script (grâce à vim) contenant tous les « mv » qui vont bien, mais je suis sûr que ça doit pouvoir se faire en une ligne de shell (ou peut-être deux, une pour les nombres à un chiffre et une pour les nombres à deux chiffres).
Quelqu'un saurait me dire comment faire ?
Note : par défaut j'utilise bash, mais si c'est plus simple je peux lancer un autre shell.