J'ai vu des gens mentionner une renamecommande, mais elle n'est pas systématiquement disponible sur les systèmes Unix (contrairement aux systèmes Linux, disons, ou Cygwin - sur les deux, renommer est un exécutable plutôt qu'un script). Cette version de renamea une fonctionnalité assez limitée:
rename from to file ...
Il remplace la partie from des noms de fichier par to , et l'exemple donné dans la page de manuel est:
rename foo foo0 foo? foo??
Cela renomme foo1 en foo01 et foo10 en foo010, etc.
J'utilise un script Perl appelé rename, que j'ai initialement extrait de la première édition du livre Camel, vers 1992, puis étendu, pour renommer les fichiers.
#!/bin/perl -w
#
# @(#)$Id: rename.pl,v 1.7 2008/02/16 07:53:08 jleffler Exp $
#
# Rename files using a Perl substitute or transliterate command
use strict;
use Getopt::Std;
my(%opts);
my($usage) = "Usage: $0 [-fnxV] perlexpr [filenames]\n";
my($force) = 0;
my($noexc) = 0;
my($trace) = 0;
die $usage unless getopts('fnxV', \%opts);
if ($opts{V})
{
printf "%s\n", q'RENAME Version $Revision: 1.7 $ ($Date: 2008/02/16 07:53:08 $)';
exit 0;
}
$force = 1 if ($opts{f});
$noexc = 1 if ($opts{n});
$trace = 1 if ($opts{x});
my($op) = shift;
die $usage unless defined $op;
if (!@ARGV) {
@ARGV = <STDIN>;
chop(@ARGV);
}
for (@ARGV)
{
if (-e $_ || -l $_)
{
my($was) = $_;
eval $op;
die $@ if $@;
next if ($was eq $_);
if ($force == 0 && -f $_)
{
print STDERR "rename failed: $was - $_ exists\n";
}
else
{
print "+ $was --> $_\n" if $trace;
print STDERR "rename failed: $was - $!\n"
unless ($noexc || rename($was, $_));
}
}
else
{
print STDERR "$_ - $!\n";
}
}
Cela vous permet d'écrire n'importe quelle commande de substitution ou de translittération Perl pour mapper les noms de fichiers. Dans l'exemple spécifique demandé, vous utiliseriez:
rename 's/^/new./' original.filename