Saya telah melihat orang-orang menyebutkan sebuah renameperintah, tetapi tidak secara rutin tersedia di sistem Unix (sebagai lawan dari sistem Linux, katakanlah, atau Cygwin - di keduanya, mengganti nama adalah yang dapat dieksekusi daripada skrip). Versi tersebut renamememiliki fungsi yang cukup terbatas:
rename from to file ...
Ini menggantikan dari bagian dari nama file dengan to , dan contoh yang diberikan di halaman manual adalah:
rename foo foo0 foo? foo??
Ini mengganti nama foo1 menjadi foo01, dan foo10 menjadi foo010, dll.
Saya menggunakan skrip Perl yang disebut rename, yang awalnya saya gali dari buku Camel edisi pertama, sekitar tahun 1992, dan kemudian diperpanjang, untuk mengganti nama file.
#!/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";
}
}
Ini memungkinkan Anda untuk menulis pengganti Perl atau perintah transliterasi untuk memetakan nama file. Dalam contoh khusus yang diminta, Anda akan menggunakan:
rename 's/^/new./' original.filename