Finding Out The Last Modified
Time For Files
How to find the last modified time for files?
I need to find out the last modified time for the files
which are older than 6 months. If I use ls -l, the files which are older
than 6 months, I am just getting the day, month and year instead of exact
time. I am using Korn shell, and SUN OS.
Solution:
If you have stat on your machine, you can use that.
From man stat
Code:
The valid format sequences for files (without --filesystem):
%X - Time of last access as seconds since Epoch %x -
Time
of last access %Y
- Time of last modification as seconds since
Epoch %y - Time of last modification
%Z - Time of last change as
seconds since Epoch %z - Time
of last change
or
I would suggest using a version of the "find" command.
I suggest a man page is a good place to start, i.e. man find<cr>.
or
Otherwise you'll have to use perl or something similar
to get a full filetime - this gets the mtime of the file:
Code:
#!/usr/bin/perl
#^ PROGRAM DESCRIPTION
#^ -------------------
#^ This program prints the modification times of files.
#^ It uses the following format: inodetime.pl filename
#^ It will accept: inodetime.pl filename1 filename2
filename3
#^
inodetime.pl /tmp/file*
#^ The format of the output is: YYYYMMDDhhmmss filename
#^ example:
#^
$ filetime.pl /tmp/t*
#^
19961115105425 /tmp/test.sql
#^
19970116113616 /tmp/tststat.pl
#^
############################################
# Get the (next) input from the command line
############################################
while ($curfile = $ARGV[0])
{
#################################################
# Do following code block only if $curfile
exists
#################################################
if (-e $curfile)
{
# stat structure into variables
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
$atime,$mtime,$ctime,$blksize,$blocks)
= stat("$curfile");
# time structure into variables
local($sec,$min,$hr,$day,$mon,$yr,$wday,@dntcare)
= localtime($mtime);
$yr = ($yr>=70) ? $yr+1900
: $yr+2000;
$yr="$yr";
$mon = (++$mon < 10)
? "0$mon" : "$mon";
$day = ($day < 10)
? "0$day" : "$day";
$hr = ($hr <
10) ? "0$hr" : "$hr";
$min = ($min < 10)
? "0$min" : "$min";
$sec = ($sec < 10)
? "0$sec" : "$sec";
# Rearrange in the YYYYMMDDhhmmss
format and assign to $dte variable
$dte = join('',$yr,$mon,$day,$hr,$min,$sec);
# Print modification date
and filename
print ("$dte\n");
}
# Shift to next position in command line
shift (@ARGV);
}
Have a Unix Problem
Unix
Forum - Do you have a UNIX Question?
Unix Books :-
UNIX Programming,
Certification, System Administration, Performance Tuning Reference Books
Return to : - Unix
System Administration Hints and Tips
(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.
Information used on this site is at your own risk.
All product names are trademarks of their respective
companies.
The site www.gotothings.com is in no way affiliated with
or endorsed by any company listed at this site.
Any unauthorised copying or mirroring is prohibited.
|