Comme je suis une bille en ligne de commande, je viens vous demander conseil ...
J'essaye de renomer une liste de fichiers jpg : tous les fichiers 01.jpg à 99.jpg en cc01.jpg à cc99.jpg ....
J'ai bien essayer rename *.jpg cc*.jpg, mais bof ... Ensuite j'ai parcouru le man, mais cela ne m'à pas bien aider ...
Y aurait-il une âme charitable ?....
rename 's//cc/' *.jpg
😉
Je pense que la man de «rename» n'est pas plus correct.

Essaie :
LANG=C man rename
RENAME(1)                  Linux Programmer's Manual                 RENAME(1)

NAME
       rename - Rename files

SYNOPSIS
       rename from to file...
       rename -V

DESCRIPTION
       rename will rename the specified files by replacing the first occurrence of from in their name by to.

       -V, --version
              Display version information and exit.

       For example, given the files
              foo1, ..., foo9, foo10, ..., foo278, the commands

              rename foo foo0 foo?
              rename foo foo0 foo??

       will turn them into foo001, ..., foo009, foo010, ..., foo278.

       And
              rename .htm .html *.htm

       will fix the extension of your html files.

SEE ALSO
       mmv(1), mv(1)

AVAILABILITY
       The rename command is part of the util-linux-ng package and is available from ftp://ftp.kernel.org/pub/linux/utils/util-linux-ng/.
Ce qui ne correspond pas au man rename» en français qui fait référence à des E.R. de type perl.

Essaie donc
rename 0 cc0 *
Mais attention c'est la première occurrence du «0» qui sera prise en compte, donc si tu as un fichier «100.jpg» il sera renommé en '1cc00.jpg' mais tu pourras utiliser un «rename 1cc cc1 *» pour rétablir.

Essaie aussi
rename '' cc *.jpg
qui va ajouter un «cc» en début de chaque fichier.


Autrement tu peux utiliser sed
for fic in *.jpg 
do 
  nouveau=$(echo $fic | sed -e 's/\(...\)\.jpg/cc\1.jpg/')  
  echo mv $fic $nouveau
done
Dans cet exemple j'utilise «echo mv» et non pas «mv» pour visualiser/simuler avant d'exécuter réellement.

En utilisant perl
for fic in *.jpg
do 
  nouveau=$(perl -e '$n=$ARGV[0] ; $n=~ s/^(\d\d)/cc$1/; print $n' $fic) 
  echo mv $fic $nouveau
done
Avec sed et perl, bienvenue dans le monde merveilleux des Expressions Régulières.
En ne faisant pas proprement sinon:
for i in `seq 1 100` ; do
mv $i.jpg cc$i.jpg
done
Enfin c'est mieux la rename je pense 8-)
@MarbolanGos
for i in `seq 1 100` va donner une suite «1 2 3 4 ...... 100» et non pas «01 02 03 ... 100»
il faudrait utiliser dans la boucle
i=$(printf '%02d' $i)
avant le mv $i.jpg pour formater la variable i avec des pré-zero.
La commande `seq debut fin` peut être remplacée par une expansion d'accolades {debut..fin}(structure utilisée dans d'autres langages).
for i in {1..99}
do
i=$(printf '%02d' $i) ;
echo mv $i.jpg cc$i.jpg
done
Pour éviter la ligne de commande tu peux installer pyrenamer qui se trouve dans les dépôts. C'est très pratique pour les séries de photos par exemple.
Nom  : pyrenamer
Architecture  : noarch
Version  : 0.6.0.1
Révision  : 3.fc11
Taille  : 882 k
Dépôt  : installed
Résumé  : A mass file renamer written in PyGTK
URL : http://www.infinicode.org/code/pyrenamer/
Licence  : GPLv2+
Description :With pyRenamer you can change the name of several files at the same
: time easily.
: - You can use patterns to rename files.
: - You can use search & replace to rename files.
: - You can use common substitutions.
: - You can manually rename selected files.
: - You can rename images using their EXIF tags.
: - You can rename MP3s using their ID3 tags.
Il existe aussi la commande mmv (paquet mmv à installer si nécessaire)
Syntaxe
mmv from to

mmv '*.jpg' 'cc#1.jpg'
Traite tous les fichiers définis par les caractères joker du premier argument «from» et utilise les #1, #2, ... #n pour récupérer les occurrences 1,2,... dans le deuxième argument «to»

C'est donc la commande la plus courte que j'aie trouvé.
Merci beaucoup pour vos réponses !
A vrai dire, je pense que je vais toutes les essayer, histoire de me former un peu ...

Mais j'ai une question : quel est l'avantage de mmv par rapport à un simple rename 0 cc0 * ?
mmv peut faire beaucoup plus que «rename 's//cc/' *.jpg» :
Parce que «rename 's//cc/' *.jpg», même s'il est conforme au «man rename» français, ne fait RIEN DU TOUT.
La commande rename est conforme au «man rename» en anglais .

Le «man rename» en anglais fait référence au /usr/bin/rename alors que le «man rename» français fait référence à une fonction perl (utilisable uniquement dans les scripts perl)
Je pense qu'il s'agit d'une erreur lors de la francisation car
rpm -qf /usr/share/man/fr/man1/rename.1.gz
man-pages-fr-3.03.0-2.fc11.noarch
alors que
rpm -qf /usr/share/man/man1/rename.1.gz
util-linux-ng-2.14.2-11.fc11.x86_64

Le paquet man-pages-fr contient un «man» de «rename» qui n'est pas correct. (L'auteur de la focntion perl est ce brave Larry Wall qui n'a pas écrit la commande «rename» .
Si j'avais du temps (à perdre?) je pourrais faire un rapport d'erreur sur bugzilla mais on me répondrait peut-être que c'est tout à fait normal.

rename from to nom_fichiers
from ::= occurence à rechercher
to ::= chaine de remplacement de l'occurrence
Mais il n'est pas question d'Expression Régulière de type perl
A la rigueur :
rename '' cc *.jpg serait peut-être plus conforme à ce que tu veux faire.
from ::= chaine vide
to ::= chaine contenant «cc» qui viendra donc s'ajouter à la première occurrence d'une chaine vide donc en début de nom.

«mmv» permet des traiter des répertoires/sous-répertoires, de supprimer des occurences; d'inverser des occurrences, ......
A part le fait qu'il est limité aux caractères joker et non pas aux E.R. de perl, il est tellement puissant que l'on ne peut pas faire de liste exhaustive. Cela dépend de l'imagination et des besoins des utilisateurs.
Cela dépasse tes besoins qui sont simplissimes par rapport à ce que peut faire mmv.

Personnellement je préfère des boucles avec «sed» ou «perl», ou «awk», ou tout langage de script avec un «echo mv» pour simuler ce qui va être exécuté car les autres commandes fonctionnent sans droit à l'erreur (sauf se creuser la tête pour refaire à l'envers ce que la dernière commande a fait).
pmarion wrote:mmv peut faire beaucoup plus que «rename 's//cc/' *.jpg» :
Parce que «rename 's//cc/' *.jpg», même s'il est conforme au «man rename» français, ne fait RIEN DU TOUT.
La commande rename est conforme au «man rename» en anglais .
Je l'ai essayé, et ça marche. :-P

À moins que ça marche sur une Debian, et pas sur une Fedora...mais là, ça m'étonnerait.
@Kenshin
Peux-tu faire :
which rename
file $(which rename)

rename -V
man rename

Sur Fedora :
man rename en français
RENAME(1) Perl Programmers Reference Guide RENAME(1)
rename [ -v ] perlexpr [ fichiers ]

Je n'ai jamais vu de fonction perl utilisable directement sous SHELL et heureusement vu le nombre d'homonymies (read, write, for, while, ...) en SHELL et en Perl.

man rename en anglais
RENAME(1) Linux Programmer's Manual RENAME(1)
rename from to file...


La première explication (perl) utilise un argument et un seul qui doit être une expression perl .
La deuxième explication (linux) utilise deux arguments : le premier est l'occurence «from», et la deuxième «to» est la chaine de remplacement de l'occurrence.

=============
Sous DEBIAN :
=============
Sous debian le man français indique aussi une fonction perl : «RENAME(1) Perl Programmers Reference Guide RENAME» mais il existe dans /etc/alternatives

/etc/alternatives/rename -> /usr/bin/prename

prename ::= rename (mais écrit en perl et utilisant la fonction perl) .
file /usrbin/prename
perl script executable

rename IS NOT prename mais grâce à /etc/alternatives il a le gout, la couleur de prename.


Pour ceux qui utilisent fedora («yum provides */prename» ne donne rien), pas d'espoir d'avoir un rename conforme au «man» français voici le code source de ce brave Larry Wall
use strict;

use Getopt::Long;
Getopt::Long::Configure('bundling');

my ($verbose, $no_act, $force, $op);

die "Usage: rename [-v] [-n] [-f] perlexpr [filenames]\n"
    unless GetOptions(
    'v|verbose' => \$verbose,
    'n|no-act'  => \$no_act,
    'f|force'   => \$force,
    ) and $op = shift;

$verbose++ if $no_act;

if (!@ARGV) {
    print "reading filenames from STDIN\n" if $verbose;
    @ARGV = <STDIN>;
    chop(@ARGV);
}

for (@ARGV) {
    my $was = $_;
    eval $op;
    die $@ if $@;
    next if $was eq $_; # ignore quietly
    if (-e $_ and !$force)
    {
    warn  "$was not renamed: $_ already exists\n";
    }
    elsif ($no_act or rename $was, $_)
    {
    print "$was renamed as $_\n" if $verbose;
    }
    else
    {
    warn  "Can't rename $was $_: $!\n";
    }
}
Comme d'habitude c'est clair net et concis. C'est normal c'est du perl. Mais ce n'est pas du standard linux «util-linux» je pense que c'est une erreur de faire en sorte qu'il s'appelle «rename», il faudrait le laisser sous le nom de «prename» comme il existe des tas de pxxxx (p comme perl) pour faciliter certains besoins.
@pmarion :

Voilà :
kenshin@debian-laptop:~$ which rename
/usr/bin/rename
kenshin@debian-laptop:~$ file $(which rename)
/usr/bin/rename: symbolic link to `/etc/alternatives/rename'
kenshin@debian-laptop:~$ rename -V
Unknown option: V
Usage: rename [-v] [-n] [-f] perlexpr [filenames]

man rename

_______________________

RENAME(1)              Perl Programmers Reference Guide              RENAME(1)

NAME
       rename - renames multiple files

SYNOPSIS
       rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]

DESCRIPTION
       "rename" renames the filenames supplied according to the rule specified
       as the first argument.  The perlexpr argument is a Perl expression
       which is expected to modify the $_ string in Perl for at least some of
       the filenames specified.  If a given filename is not modified by the
       expression, it will not be renamed.  If no filenames are given on the
       command line, filenames will be read via standard input.

       For example, to rename all files matching "*.bak" to strip the
       extension, you might say

               rename 's/\.bak$//' *.bak

       To translate uppercase names to lower, you'd use

               rename 'y/A-Z/a-z/' *

OPTIONS
       -v, --verbose
               Verbose: print names of files successfully renamed.

       -n, --no-act
               No Action: show what files would have been renamed.

       -f, --force
               Force: overwrite existing files.

ENVIRONMENT
       No environment variables are used.

AUTHOR
       Larry Wall

SEE ALSO
       mv(1), perl(1)
________________________
DEBIAN : file /usr/bin/rename wrote:symbolic link to `/etc/alternatives/rename'
Ce qui serait amusant (si ce n'était pas tragique) c'est que sur ma version de debian il s'agit d'une «fausse alternative» puisqu'il n'y a pas de programme standard «rename»
update-alternatives --config rename
Il n'y a qu'un programme fournissant rename (/usr/bin/prename).

Où est l'alternative ?

Remarque sur le «standard alternatives», sous fedora la commande d'administration s'appelle «alternatives» alors que sous debian elle s'appelle «update-alternatives»

Autant j'applaudis des deux mains l'alternative sur des produits comme sendmail/postfix java-SUN/javaOpenjdk ou autre vrai produit, autant je suis dubitatif voire hostile quand il s'agit d'une pauvre et simple commande.
De toute façon la fonction «alias» n'est pas faire pour les chiens.

Bon c'était mon nième coup de gueule de la semaine.

Si j'écris un script utilisant «rename», je suis en droit de pouvoir utiliser ce script sur des Linux standard.
Dans deux ou trois ans de divergences non contrôlées sur des distributions différentes, plus de normes, plus de compatibilité, plus de portabilité, .......

Sous Unix V les commandes d'administration étaient pratiquement toujours différentes, mais les commandes utilisateurs suivaient une certaine norme.

POSIX, réveille toi, ils vont devenir fous.

Enfin, je ne suis pas sûr que la commande «rename» soit normalisée POSIX et comme les normes POSIX ne doivent/peuvent pas être publiées sur Internet, je n'ai pas moyen de le contrôler.
Pas de
man -s 1p rename
donc pas de spécification POSIX .

Si l'on veut améliorer une commande comme rename, il suffit de garder la compatibilité avec l'ancienne mais en ajoutant une nouvelle option qui permettrait de spécifier une expression régulière au lieu des deux argument «from to» et l'on pourrait avoir un «usage»
Usage 
rename  from to fichier1 [fichier2 ..]
rename -p perlexpr  fichier1 [fichier2 ..]
C'est comme cela que les commandes doivent évoluer.
Perso je me sert de gkthumb, digikam, etc... pour le faire, voir krename...

Mais c'est vrai qu'en apprendre plus en ligne de commande aide pas mal, mais bon... faut pas toujours vouloir ce prendre la tête quoi...

Au passage vous avez aussi votre moteur de recherche favori qui vous permets d'en savoir un peut plus, voir d'avoir parfois des man mieux commentés...
gtkthumb, digikam, krename, ..... autant d'interfaces graphiques.
Bien sûr elles sont très pratiques et il m'arrive d'en utiliser

je persiste à dire que si l'on écrit un script on est en droit d'avoir
- des commandes simples et puissantes appellables à partir de ce script.
- une documentation correcte de ces commandes.
- un standard entre toutes les distributions pour les commandes de base (1), que les commandes (8) ne soient pas tout à fait standard me choque moins..

voir d'avoir parfois des man mieux commentés...
Dans le cas de la commande «rename» google renvoie dos à dos ceux qui serait partisans de la syntaxe perlière (perlienne?) ou ceux qui préfèrent le «from to» sans pour autant indiquer que les deux existent.

De plus en allant à la pêche au «man» sur google, on peut tomber sans le savoir vraiment sur des man qui datent d'Hérode de Stephen Bourne.
Très souvent les vieilles documentations de commandes sont compatibles car il y a toujours souvent une compatibilité des anciennes options, mais on ne voit pas forcément les nouvelles.
La bible des commandes est dans
man commande
info commande
Bon, et bien avoir tester une partie de tout ça, voici mes commentaires :

pyrenamer : simple à utiliser et bien pratique avec des fonctions puissantes. Tres pratique pour les mp3.
commande rename comme indiquée par pmarion : nickel, rapide et simple
suggestion Vindicator : avec Digikam, qui est le soft que j'utilise pour mes photos : vraiment nickel pour les photos, surement ma solution préférée ...

il va me falloir un certains temps pour comprendre les explications impressionnantes de pmarion, mais mmv à l'air d'être un super outil. Mais pour mes besoins somme toute assez basiques, c'est surement écraser un moustique avec un bazooka ...

Merci encore à tous pour vos précieux conseils, je m'endormirai un poil moins bête ce soir !

PS: ça y est, mes photos ont les noms qui vont bien .....:-D
pmarion wrote:je persiste à dire que si l'on écrit un script on est en droit d'avoir
- des commandes (simples?) appellables à partir d'un script
- une documentation correcte de ces commandes
- un standard entre toutes les distributions pour les commandes de base (1), que les (8) ne soient pas tout à fait standard me choque moins.
Pour le coup, je suis 100% d'accord !
il va me falloir un certains temps pour comprendre les explications impressionnantes de pmarion
Je pensais pourtant être resté simple (voire simpliste) dans mes remarques.

P.S. : rename (tout du moins /usr/bin/rename) est une commande et non pas une fonction (voir ton sujet)
Mieux que ça, tu as été très pédagogue ! Cela dit, entre pouvoir lire, appliquer puis maîtriser, il me faudra un certain temps ...
Voici encore un outil pour renommer tes fichiers : j'ai fait un simple script qui fera ce que tu veux :
renomme -n
(option "-n" pour ne pas mettre d'espace entre "cc" et "01.jpg")
=> voir script "renomme" les fichiers