ファイルのタイムスタンプを信じて、ファイル名を "年-月-日-時-分-秒.拡張子" という形式に変換する簡単なツールです。 デジカメの写真整理などに御利用下さい。 「無償・無保証・著作権放棄」 です。
% file2date /mnt/pcc/dcim/100k3800/* /mnt/pcc/dcim/100k3800/dcp_0001.jpg --> 2001-06-23-20-05-32.jpg /mnt/pcc/dcim/100k3800/dcp_0002.jpg --> 2001-06-23-20-13-40.jpg /mnt/pcc/dcim/100k3800/dcp_0003.jpg --> 2001-06-23-20-15-48.jpg
#! /usr/bin/env perl
### NO WARRANTY, NO COPYRIGHT! ###
# convert file name "dir/dir/foo.ext" to "year-month-day-hour-min-sec.ext"
# Usage: prog file [file ...]
# Ex: dcp_0003.jpg --> 2001-06-23-20-05-32.jpg
# Ex: /home/yto/e-01.txt --> 2001-06-12-14-32-10.txt
use strict;
use POSIX qw(strftime);
use File::Copy;
use File::Basename;
foreach my $fn (@ARGV) {
my ($base, $dir, $ext) = fileparse($fn, '\..*');
my $date = strftime "%Y-%m-%d-%H-%M-%S", localtime((stat $fn)[9]);
print "$fn --> $date$ext\n";
copy($fn, $date.$ext);
utime((stat $fn)[8, 9], $date.$ext); # set timestamps
}
#! /usr/bin/perl
### NO WARRANTY, NO COPYRIGHT! ###
# convert file name "dir/dir/foo.suf" to "year-month-day-hour-min-sec.suf"
# Usage: prog file [file ...]
# Ex: dcp_0003.jpg --> 2001-06-23-20-05-32.jpg
# Ex: /home/yto/e-01.txt --> 2001-06-12-14-32-10.txt
foreach my $fn (@ARGV) {
my ($suf) = ($fn =~ /(\.[^\.]+)$/);
my ($sec, $mi, $h, $dm, $mo, $y) = localtime((stat $fn)[9]);
$DATE = sprintf("%4s-%02s-%02s-%02s-%02s-%02s",
$y + 1900, $mo + 1, $dm, $h, $mi, $sec);
print "$fn --> $DATE$suf\n";
`cp $fn $DATE$suf`;
}