Python
import os
path = '/path/to/files/'
for filename in os.listdir(path):
prefix, num = filename[:-4].split('_')
num = num.zfill(4)
new_filename = prefix + "_" + num + ".png"
os.rename(os.path.join(path, filename), os.path.join(path, new_filename))
Вы можете составить список допустимых имен файлов, предполагая, что все файлы, которые начинаются с «output_» и заканчиваются на «.png», являются действительными файлами:
l = [(x, "output" + x[7:-4].zfill(4) + ".png") for x in os.listdir(path) if x.startswith("output_") and x.endswith(".png")]
for oldname, newname in l:
os.rename(os.path.join(path,oldname), os.path.join(path,newname))
Bash
(из: http://www.walkingrandomly.com/?p=2850)
Другими словами, я заменяю file1.png на file001.png и file20.png на file020.png и т. Д. Вот как это сделатьсделайте это в bash
#!/bin/bash
num=`expr match "$1" '[^0-9]*\([0-9]\+\).*'`
paddednum=`printf "%03d" $num`
echo ${1/$num/$paddednum}
Сохраните вышеупомянутое в файл с именем zeropad.sh
и затем выполните следующую команду, чтобы сделать его исполняемым
chmod +x ./zeropad.sh
Затем вы можете использовать zeropad.sh
Сценарий выглядит следующим образом:
./zeropad.sh frame1.png
, который будет возвращать результат
frame001.png
Осталось только использовать этот сценарий для переименования всех файлов .png в текущем каталоге, чтобы ониzeropadded.
for i in *.png;do mv $i `./zeropad.sh $i`; done
Perl
(из: Переименование нулевого планшета, например, Image (2) .jpg -> Image (002) .jpg )
use strict;
use warnings;
use File::Find;
sub pad_left {
my $num = shift;
if ($num < 10) {
$num = "00$num";
}
elsif ($num < 100) {
$num = "0$num";
}
return $num;
}
sub new_name {
if (/\.jpg$/) {
my $name = $File::Find::name;
my $new_name;
($new_name = $name) =~ s/^(.+\/[\w ]+\()(\d+)\)/$1 . &pad_left($2) .')'/e;
rename($name, $new_name);
print "$name --> $new_name\n";
}
}
chomp(my $localdir = `pwd`);# invoke the script in the parent-directory of the
# image-containing sub-directories
find(\&new_name, $localdir);
Переименовать
Также сверху ответ:
rename 's/\d+/sprintf("%04d",$&)/e' *.png