Using a file's modification date in the filename

C

cca.johnson

I want to be able to rename a file and prepend the file's modification
date at the front of the file. For example:
with a file named testme.txt and a modification date of April 1, 2006,
I want the renamed file to be named 20060401-testme.txt

What I can do is get the modification date using ctime, but it I can't
figure out how to format the output. I am able to format the date the
way I like using strftime. Here is some sample code which shows the
output I do and do not want:

#!/usr/bin/perl -w
use strict ;
use warnings ;
use POSIX qw(strftime);

# print today's date YYYYMMDD:
my $now_time = strftime "%Y%m%d", localtime;
print "I want it formatted this way:\n$now_time\n";

# print the modified date of file:
use File::stat;
use Time::localtime;
my $file = "testme.txt";
my $timestamp = ctime(stat($file)->mtime);
print "...but not this way:\n $timestamp\n";


Any assistance would be appreciated,
 
J

Jürgen Exner

I want to be able to rename a file and prepend the file's modification
date at the front of the file. For example:
with a file named testme.txt and a modification date of April 1, 2006,
I want the renamed file to be named 20060401-testme.txt

What I can do is get the modification date using ctime, but it I can't
figure out how to format the output.

It seems like Date::Formatter will probably do what you are looking for.

jue
 
X

xhoster

I want to be able to rename a file and prepend the file's modification
date at the front of the file. For example:
with a file named testme.txt and a modification date of April 1, 2006,
I want the renamed file to be named 20060401-testme.txt

What I can do is get the modification date using ctime, but it I can't
figure out how to format the output. I am able to format the date the
way I like using strftime. Here is some sample code which shows the
output I do and do not want:

#!/usr/bin/perl -w
use strict ;
use warnings ;
use POSIX qw(strftime);

# print today's date YYYYMMDD:
my $now_time = strftime "%Y%m%d", localtime;
print "I want it formatted this way:\n$now_time\n";

mtime and time both use seconds since the epoch, so
it should work the same way if you just give localtime the results of
mtime instead of letting it default to using time.

my $now_time = strftime "%Y%m%d", localtime(stat($file)->mtime);

Xho

--
-------------------- http://NewsReader.Com/ --------------------
The costs of publication of this article were defrayed in part by the
payment of page charges. This article must therefore be hereby marked
advertisement in accordance with 18 U.S.C. Section 1734 solely to indicate
this fact.
 
C

cca.johnson

mtime and time both use seconds since the epoch, so
it should work the same way if you just give localtime the results of
mtime instead of letting it default to using time.

my $now_time = strftime "%Y%m%d", localtime(stat($file)->mtime);

Xho

After I removed use Time::localtime, this worked without error. My
guess is that there is a conflict between POSIX qw(strftime)and
Time::localtime. Here is what I have:

#!/usr/bin/perl -w
use strict ;
use warnings ;
use POSIX qw(strftime);
use File::Copy;
use File::stat;

# print today's date YYYYMMDD:
my $now_time = strftime "%Y%m%d", localtime;
print "I want it formatted this way:\n$now_time\n";

# print the modified date of file:
my $file = "testme.txt";
my $file_time = strftime "%Y%m%d", localtime(stat($file)->mtime);
print "file $file will be renamed $file_time-$file\n";
copy("$file", "$file_time-$file") or die "can't copy file: $!";

Thank you,
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,982
Messages
2,570,186
Members
46,740
Latest member
JudsonFrie

Latest Threads

Top