Как переименовать несколько файлов со случайными именами вместе
У меня есть файлы со случайными именами, и я хочу переименовать их все вместе, как Trace1, Trace2 и так далее.... Есть идеи?
3 ответа
Решение
Или в Perl:
#!/usr/bin/perl
use strict;
use warnings;
# use dirname() to keep the renamed files in the same directory
use File::Basename qw( dirname );
my $i = 1;
for my $file (@ARGV) {
rename $file, dirname($file) . "/Trace$i";
print "$file -> Trace$i\n";
} continue { $i++ }
Если вы новичок в Linux, вам также нужно помнить, чтобы сделать скрипт исполняемым (при условии, что скрипт был сохранен в файле с именем random-renamer
):
chmod 755 random-renamer
А затем запустить его (переименуйте все файлы в random-files
каталог):
./random-renamer random-files/*
Это проверяет, существуют ли какие-либо файлы с именем Trace#
и избегает забивать их.
use Path::Class qw( dir );
use List::Util qw( max );
my $dir = dir(...);
my @files =
map $_->basename(),
grep !$_->is_dir(),
$dir->children();
my $last =
max 0,
map /^Trace([0-9]+)\z/,
@files;
my $errors;
for (@files) {
my $old = $dir->file($_);
my $new = $dir->file("Trace" . ++$last);
if (!rename($new, $old)) {
warn("Can't rename \"$old\" to \"$new\": $!\n");
++$errors;
}
}
exit($errors ? 1 : 0);
Вы можете просто использовать команду оболочки:
i=1;
for f in *
do
mv $f "Trace$i"
i=$(($i+1))
done