Rename Files to Modified Time with Perl
We were processing hundreds of recordings for a client, but they didn’t know the dates on the files because moving between systems changed the date time stamp. The solution was to programatically rename the files with their modified time so no matter where the file went, we would always know it’s date.
This is just a snippet that we wanted to save and thought you might find it useful.
What to Learn From this Perl Script
Get an Array of Files
Loop over and Array
Extra Modified Time from Files using Stat
Rebuild File names Based on our Desire
Rename Files, Programmatically
Perl Source Code to Rename Files with Dates
#!/usr/bin/perl
# standard modules
use warnings;
use strict;
# allows us to get the time parts
use POSIX 'strftime';
# glob a set of files, modify as it suits you
my @files = <*.wav>;
# loop over the array, extract file information from each
# stat() puts the data into several variables
foreach my $file (@files){
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat($file);
# ok now format the time the way we like.
my $date = strftime '%Y.%m.%d-%H.%M.%S', localtime $mtime;
# and then massage the actual name to something more sanitized
my $f = $file;
$f =~ s/\s+/ /g; # replace all spaces with 1 space
$f =~ s/ /\-/g; # replace one space with 1 dash, as many times as you find it
# we have our name, so lets do the actual renaming
rename "$file", "$date\-$f";
}
Custom Perl Programming
Do you have problems that you want solved by automation or scripting? Contact us for custom Perl programming. We can write small and large scripts for system administration, or every day tasks such as renaming files.