renommer en lot

Le
Remys Morrissette
Bonjour,

j'ai une série de fichiers (+/- 25000)

exemple :

0bf153bfa73346bafd4035908ff3a4fb.png Wed Oct 24 00:16:57 2007
0bf30ca8b401ab42ad9adc8327ce8ac7.png Mon Sep 10 21:15:09 2007
acda647ce3d021a81e126f9ccc622139.png Tue May 22 21:17:32 2007
ace127012b35f74f29bf58a82268a98b.png Thu Apr 13 23:52:55 2006
e3e1602a552ffe15b446388239b9299d.png Sun Apr 15 22:36:11 2007
e3e3e4449d314d7abae0d1bba0acdc91.png Mon Sep 10 21:33:37 2007


que j'aimerais renommer de façon séquentiel

dans le genre 1, 2, 3, ., 25000

ou encore, 01, 02, 03, , a1, a2, a3, ., e

avec l'ordre par date si possible.

des idées ?

Remys





--
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 debian-user-french-REQUEST@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.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
Jack.R
Le #9642571
On Mon, 28 Jan 2008 00:11:58 -0500
Remys Morrissette
Bonjour,

j'ai une série de fichiers (+/- 25000)

exemple :

0bf153bfa73346bafd4035908ff3a4fb.png Wed Oct 24 00:16:57 2007
0bf30ca8b401ab42ad9adc8327ce8ac7.png Mon Sep 10 21:15:09 2007
acda647ce3d021a81e126f9ccc622139.png Tue May 22 21:17:32 2007
ace127012b35f74f29bf58a82268a98b.png Thu Apr 13 23:52:55 2006
e3e1602a552ffe15b446388239b9299d.png Sun Apr 15 22:36:11 2007
e3e3e4449d314d7abae0d1bba0acdc91.png Mon Sep 10 21:33:37 2007


que j'aimerais renommer de façon séquentiel

dans le genre 1, 2, 3, ...., 25000

ou encore, 01, 02, 03, ..., a1, a2, a3, ...., e...

avec l'ordre par date si possible.

des idées ?

Remys





Bonjour,

Un petit script bash (non testé, donc travailler sur une copie des
images)

#!/bin/sh
count=0
for item in `ls -t -r *.png`
do
mv $item `printf "%06d" $count`.png
count=$(( $count + 1 ))
done

--
Jack.R
Francois Mescam
Le #9642561
Remys Morrissette wrote:
Bonjour,

j'ai une série de fichiers (+/- 25000)

exemple :

0bf153bfa73346bafd4035908ff3a4fb.png Wed Oct 24 00:16:57 2007
0bf30ca8b401ab42ad9adc8327ce8ac7.png Mon Sep 10 21:15:09 2007
acda647ce3d021a81e126f9ccc622139.png Tue May 22 21:17:32 2007
ace127012b35f74f29bf58a82268a98b.png Thu Apr 13 23:52:55 2006
e3e1602a552ffe15b446388239b9299d.png Sun Apr 15 22:36:11 2007
e3e3e4449d314d7abae0d1bba0acdc91.png Mon Sep 10 21:33:37 2007


que j'aimerais renommer de façon séquentiel

dans le genre 1, 2, 3, ...., 25000

ou encore, 01, 02, 03, ..., a1, a2, a3, ...., e...

avec l'ordre par date si possible.

des idées ?



Il y a metamorphose http://file-folder-ren.sourceforge.net/ pour cela.


Remys









--
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
Frédéric BOITEUX
Le #9642541
Le lun 28 jan 2008 00:11:58 CET, Remys Morrissette

Bonjour,

j'ai une série de fichiers (+/- 25000)
.....
que j'aimerais renommer de façon séquentiel
dans le genre 1, 2, 3, ...., 25000
ou encore, 01, 02, 03, ..., a1, a2, a3, ...., e...
avec l'ordre par date si possible.

des idées ?



Regarde le paquet « mmv » :

Déplace/copie/ajoute/lie plusieurs fichiers

mmv est un programme pour déplacer/copier/ajouter/lier plusieurs fichiers selon un jeu de motifs jokers. Toutes ces actions sont effectuées en tou te sécurité, i.e. sans un effacement inexpliqué de fichiers dû à des collisions sur des noms de cibles avec des noms de fichiers existants o u avec d'autres noms de cibles.

Fred.
Vincent Gay
Le #9642421
Remys Morrissette a écrit :
j'ai une série de fichiers (+/- 25000)

../..

que j'aimerais renommer de façon séquentiel

dans le genre 1, 2, 3, ...., 25000

ou encore, 01, 02, 03, ..., a1, a2, a3, ...., e...

avec l'ordre par date si possible.

des idées ?

Remys



sudo apt-get install krename
Jacques L'helgoualc'h
Le #9642361
Vincent Gay a écrit, mardi 29 janvier 2008, à 07:34 :
Remys Morrissette a écrit :
j'ai une série de fichiers (+/- 25000)

../..





que j'aimerais renommer de façon séquentiel
dans le genre 1, 2, 3, ...., 25000
ou encore, 01, 02, 03, ..., a1, a2, a3, ...., e...
avec l'ordre par date si possible.

des idées ?

Remys



sudo apt-get install krename



Ça me semble un peu lourd quand on n'utilise pas KDE :

,----
| Version: 3.0.9-2.1
| Depends: kdelibs4c2a (>= 4:3.5.4-1), libacl1 (>= 2.2.11-1), libart-2.0-2
| (>= 2.3.16), libattr1 (>= 2.4.4-1), libaudio2, libc6 (>= 2.3.6-6),
| libfam0, libfontconfig1 (>= 2.3.0), libfreetype6 (>= 2.2), libgcc1 (> | 1:4.1.0), libice6, libidn11 (>= 0.5.18), libjpeg62, libpng12-0 (> | 1.2.8rel), libqt3-mt (>= 3:3.3.6), libsm6, libstdc++6 (>= 4.1.0),
| libx11-6, libxcursor1 (>> 1.1.2), libxext6, libxft2 (>> 2.1.1), libxi6,
| libxinerama1, libxrandr2, libxrender1, libxt6, zlib1g (>= 1:1.2.1)
| Size: 315276
`----

~ # apt-get -s install krename
Lecture des listes de paquets... Fait
Construction de l'arbre des dépendances... Fait
Les paquets supplémentaires suivants seront installés :
hicolor-icon-theme kdelibs-data kdelibs4c2a libarts1c2a libavahi-qt3-1
liblua50 liblualib50 libopenexr2c2a libqt3-mt menu-xdg
Paquets suggérés :
fam libqt3-mt-psql libqt3-mt-mysql libqt3-mt-odbc
Paquets recommandés :
libarts1-akode
Les NOUVEAUX paquets suivants seront installés :
hicolor-icon-theme kdelibs-data kdelibs4c2a krename libarts1c2a
libavahi-qt3-1 liblua50 liblualib50 libopenexr2c2a libqt3-mt menu-xdg
0 mis à jour, 11 nouvellement installés, 0 à enlever et 3 non mis à jour.


Avec Perl, on dispose de /usr/bin/prename (= rename), qui permet de
renommer à l'aide de commandes :

Usage: rename [-v] [-n] [-f] perlexpr [filenames]

Pour compter, il faudrait pouvoir initialiser une variable ad-hoc en
dehors de la boucle où s'exécute « perlexpr » ; j'ai donc modifié une
copie de prename, en vérifiant que la variable $n était libre

~ $ diff prename /usr/bin/
39,40d38
< my $n = 42;
<

~ $ grep '$n>' prename
my $n = 42;

et peux donc renommer séquentiellement les toto_*

~ $ ./prename -n 's/_/"_" . $n++ . "_"/e' toto_*
toto_a renamed as toto_42_a
toto_b renamed as toto_43_b
toto_c renamed as toto_44_c
toto_d renamed as toto_45_d
toto_e renamed as toto_46_e
toto_f renamed as toto_47_f

Le script reste léger :
~ $ l prename
-rwxr-xr-x 1 lhh lhh 3000 2008-01-29 10:42 prename

Pour des besoins plus avancés, on pourrait ajouter une option comme

[ -i perlbegin ]

pour ne pas avoir à modifier le code en fonction de la valeur initiale.
--
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
Andre Majorel
Le #9642311
On 2008-01-28 06:59 +0100, Jack.R wrote:
On Mon, 28 Jan 2008 00:11:58 -0500
Remys Morrissette
> j'ai une série de fichiers (+/- 25000)
>
> exemple :
>
> 0bf153bfa73346bafd4035908ff3a4fb.png Wed Oct 24 00:16:57 2007
> 0bf30ca8b401ab42ad9adc8327ce8ac7.png Mon Sep 10 21:15:09 2007
> acda647ce3d021a81e126f9ccc622139.png Tue May 22 21:17:32 2007
> ace127012b35f74f29bf58a82268a98b.png Thu Apr 13 23:52:55 2006
> e3e1602a552ffe15b446388239b9299d.png Sun Apr 15 22:36:11 2007
> e3e3e4449d314d7abae0d1bba0acdc91.png Mon Sep 10 21:33:37 2007
>
>
> que j'aimerais renommer de façon séquentiel
>
> dans le genre 1, 2, 3, ...., 25000
>
> ou encore, 01, 02, 03, ..., a1, a2, a3, ...., e...
>
> avec l'ordre par date si possible.

Un petit script bash (non testé, donc travailler sur une copie des
images)

#!/bin/sh
count=0
for item in `ls -t -r *.png`
do
mv $item `printf "%06d" $count`.png
count=$(( $count + 1 ))
done



Il y a au moins un problème avec ce script ; la liste des fichiers
à traiter doit tenir sur la ligne de commande. On aura plus de
chances d'aboutir en faisant :

find . -name "*.png" -type f -printf '%T@ %pn' |
sort -n |
awk '{ print "mv "" $2 "" " sprintf("%05d.png", NR) }' |
sh

Le code ci-dessus suppose que a) aucun des noms de fichiers à
renommer ne contient de newlines ou autres métacaractères shell,
b) qu'aucun des nouveaux noms n'existent et c) il est acceptable
de lancer un process mv par fichier. Voici une autre méthode qui
n'a pas ces inconvénients :

find . -name "*.png" -type f -print0 |
grep -z '/[0-9a-f]{32}.png$' |
perl -we '$/ = "";
while (defined ($pathname = <>)) {
$pathname =~ s/$//;
print "> $pathnamen";
@s = stat $pathname;
die "$pathname: $!n" unless @s;
push @files, [$s[9], $pathname];
}
@files = sort { $a->[0] <=> $b->[0] } @files;
my $n = 0;
foreach $f (@files) {
$oldname = $f->[1];
do {
$n++;
$newname = sprintf "%05d.png", $n;
} while (-e $newname);
print "$oldname -> $newnamen";
rename $oldname, $newname
or die "$oldname: cannot rename to $newname ($!)n";
}'

Ce programme n'est pas prévu pour être utilisé de façon
incrémentale ; s'il est lancé plusieurs fois dans le même
répertoire après ajout de nouveaux fichiers [0-9a-f]{32}.png,
les numéros attribués aux nouveaux fichiers ne correspondront pas
à l'ordre des mtime, sauf si le plus ancien fichier ajouté est
plus récent que le plus récent fichier renommé dans la passe
précédente. Donc, si on renomme les fichiers de décembre puis on
ajoute les fichiers de novembre, pas la peine d'espérer que le
script remettra tous les numéros dans l'ordre.

--
André Majorel Thanks to the Debian project for going to such lengths never to
disclose the email addresses of their users. Think of all the
spam we would get if they didn't !


--
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
Jack.R
Le #9642241
On Tue, 29 Jan 2008 15:05:43 +0100
Andre Majorel
> Un petit script bash (non testé, donc travailler sur une copie des
> images)
>
> #!/bin/sh
> count=0
> for item in `ls -t -r *.png`
> do
> mv $item `printf "%06d" $count`.png
> count=$(( $count + 1 ))
> done

Il y a au moins un problème avec ce script ; la liste des fichiers
à traiter doit tenir sur la ligne de commande.



Je viens de faires des essais avec une trentaine de fichier dont les
noms font environ 70 caractères, ls passe bien à la ligne mais cela
fonctionne.
Cela cloche lorsqu'il y a des espaces dans le nom des fichiers à
traiter.

Je suis curieux et je n'ai pas compris ce que tu voulais dire. Peux-tu
expliquer ?

--
Jack.R
Andre Majorel
Le #9642211
On 2008-01-29 19:37 +0100, Jack.R wrote:
On Tue, 29 Jan 2008 15:05:43 +0100
Andre Majorel
> > Un petit script bash (non testé, donc travailler sur une copie des
> > images)
> >
> > #!/bin/sh
> > count=0
> > for item in `ls -t -r *.png`
> > do
> > mv $item `printf "%06d" $count`.png
> > count=$(( $count + 1 ))
> > done
>
> Il y a au moins un problème avec ce script ; la liste des fichiers
> à traiter doit tenir sur la ligne de commande.

Je viens de faires des essais avec une trentaine de fichier dont les
noms font environ 70 caractères, ls passe bien à la ligne mais cela
fonctionne.



Il faut essayer avec les 25000 qu'a le monsieur. :-)

Cela cloche lorsqu'il y a des espaces dans le nom des fichiers à
traiter.



Oui, parce que le shell fait une passe de word splitting sur le
résultat de l'expansion des backquotes.

Je suis curieux et je n'ai pas compris ce que tu voulais dire. Peux-tu
expliquer ?



Sous Unix, il y a une limite à la longueur totale des arguments
d'un process. Cette limite s'appelle ARG_MAX (limits.h) et sa
valeur varie d'un système à l'autre. Sous Linux, elle était de 128 kB
aux dernières nouvelles. SUS dit que ARG_MAX doit être supérieure
ou égale à _POSIX_ARG_MAX, qui vaut 4 kB.

Il n'est pas prudent de faire « for v in `truc` » ou « foo * » si
on n'est pas sûr que l'expansion de « `truc` » ou « * » n'excèdera
pas _POSIX_ARG_MAX. Il vaut mieux utiliser xargs ou, si on ne peut
pas, « while read ». Dans le cas qui nous occupe,

ls -t -r *.png |
while IFS= read -r f
do
mv "$f" ...
done

Et attention : "The number of bytes available for the new process'
combined argument and environment lists is {ARG_MAX}. It is
implementation-dependent whether null terminators, pointers,
and/or any alignment bytes are included in this total." Donc, dans
le cas le plus défavorable, 4 kB pour ARG_MAX, disons 1 kB
d'environnement, des noms de fichiers de deux caractères, quatre
octets par pointeur et un alignement à 16, on pourrait
parfaitement être limité à (4096 - 1024) / (16 + 4) = 153
arguments ce qui correspond à 306 caractères.

--
André Majorel The Debian project must be praised for their efforts in fighting spam by
flooding spammers with email addresses, some of which are even bogus.


--
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
Jack.R
Le #9642181
On Tue, 29 Jan 2008 22:24:21 +0100
Andre Majorel
On 2008-01-29 19:37 +0100, Jack.R wrote:



> Je suis curieux et je n'ai pas compris ce que tu voulais dire.
> Peux-tu expliquer ?



[ .. explication claire et détaillée .. ]

Merci beaucoup.

--
Jack.R
mpg
Le #9725321
Le (on) mardi 29 janvier 2008 20:00, Jack.R a écrit (wrote) :

Il y a au moins un problème avec ce script ; la liste des fichiers
à traiter doit tenir sur la ligne de commande.



Je viens de faires des essais avec une trentaine de fichier dont les
noms font environ 70 caractères, ls passe bien à la ligne mais cela
fonctionne.



Je crois que ce n'est pas ce ça qu'il s'agissait. Le problème est que la
ligne de commande que peut traiter un shell a une longueur limitée. Donc si
il y trop de fichiers, le « for i in `ls -r` » va être transformé en
« for i in 1.png 2.png [...] n.png » qui va faire exploser le shell si n est
trop grand.

Euh, ceci dit, en testant là chez moi (sous zsh), un petit
% for i in `seq 1 1000000`; do echo "$i "; done; echo '';
n'a pas l'air de faire exploser quoi que ce soit, alors qu'il produit quand
même une *très* longue ligne de commande d'après le raisonnement précédent.

Cela cloche lorsqu'il y a des espaces dans le nom des fichiers à
traiter.



C'est logique. Pour éviter ça, on pourrait, avec zsh, faire :
for i in **/*.png
mais on perd alors le classement par date.

Par ailleurs, il y a un autre problème avec le `ls -t -r *.png`, lié au
traitement des *, qui est effectué par le shell, et non par ls : ainsi,
le -r ne sert ici à rien, car ls ne verra que la liste des .png du
répertoire courant, produite par le shell : il ne fera en fait que le
classement par date.


Manuel.


--
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
Publicité
Poster une réponse
Anonyme