Как переименовать несколько файлов со случайными именами вместе

У меня есть файлы со случайными именами, и я хочу переименовать их все вместе, как 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
Другие вопросы по тегам