[NTLUG:Discuss] How to tell file1 is half an hour older than file2?
Fred James
fredjame at concentric.net
Mon Apr 29 12:57:57 CDT 2002
Point well made, point well taken.
MadHat wrote:
> On Mon, 2002-04-29 at 12:07, Fred James wrote:
>
>>stat, sed, awk, grep, echo, and test are all available on SVR4, so they
>>are probable available on most UNIX, Linux, and other UNIX like, systems.
>>
>>
>
> most GNU (_GNU's_Not_Unix_) tools are available for almost all systems,
> Unix like or not (like Windows, Mac, OS/2, MS-DOS, Atari, Amiga, etc...)
>
> The post simply stated "without GNU tools". Since this is a Linux
> mailing list, and Linux uses mostly GNU tools for the above programs, I
> simply stated that they were GNU tools and that made the script posted
> out of bounds for what was requested.
>
> The original requester needs to clarify what is and is not available on
> the system and maybe what the system type is, blah-blah-blah,
> rapateta...
>
>
>>
>>MadHat wrote:
>>
>>
>>>stat, sed, awk, grep, echo and test are GNU tools.
>>>He said without gnu tools.
>>>
>>>I mean in perl, it is just a few lines (adding a few for a usage
>>>statement to make it pretty). Tcl isn't much different, or PHP (which
>>>can be used as a CLI script, but I wouldn't do it).
>>>
>>>#!/usr/bin/perl
>>>if ($ARGV[0] && $ARGV[1]) {
>>> @data1 = stat $ARGV[0];
>>> @data2 = stat $ARGV[1];
>>> if ($data1[9] > $data2[9]) {
>>> print "$ARGV[0] is newer\n"
>>> } else {
>>> print "$ARGV[1] is newer\n"
>>> }
>>>} else {
>>> print "Usage: $0 <file1> <file2>
>>> will return the newer file based on mtime (time the file was last
>>>modified)\n\n";
>>>}
>>>
>>>
>>>I mean if you want to use stat, you can just do
>>>stat -t $1 | awk -F' ' {print'$13'}
>>>to get the date in seconds since the epoc and compare them directly, no
>>>need to convert them.
>>>
>>>There are hundreds of ways of doing this, but most use GNU tools, which
>>>he said he does not have (which seems odd to me, but...)
>>>
>>>On Mon, 2002-04-29 at 10:32, Paul Ingendorf wrote:
>>>
>>>
>>>>I know you can do file1 -ol file2 but for time I'm pretty sure you would have to write your own function to tell for sure.
>>>>
>>>>Just think it out logically it might take a bit of time but it isn't all that hard per se.
>>>>
>>>>function returnTimeDiff {
>>>> echo some code here for file $1 and file $2
>>>>}
>>>>
>>>>What I would recommend is turning the dates into a single number via whatever algorithm you like. I.E. year in seconds/minutes Same for month day and hour then add your minutes or seconds and subtract the two and check the difference.
>>>>
>>>>The following should show you how easy it is. The following script requires sed, awk, and stat all GNU tools installed on most systems.
>>>>
>>>># ---------------------------------- Example -----------------------------------
>>>># Author Paul Ingendorf
>>>>function returnYear {
>>>> echo $1 | awk -F\| {print'$6'}
>>>>}
>>>>function returnMonthNum {
>>>> month=`echo $1 | awk -F\| {print'$3'}`
>>>> case "$month" in
>>>> Jan)
>>>> echo 1
>>>> ;;
>>>> Feb)
>>>> echo 2
>>>> ;;
>>>> Mar)
>>>> echo 3
>>>> ;;
>>>> Apr)
>>>> echo 4
>>>> ;;
>>>> May)
>>>> echo 5
>>>> ;;
>>>> Jun)
>>>> echo 6
>>>> ;;
>>>> Jul)
>>>> echo 7
>>>> ;;
>>>> Aug)
>>>> echo 8
>>>> ;;
>>>> Sep)
>>>> echo 9
>>>> ;;
>>>> Oct)
>>>> echo 10
>>>> ;;
>>>> Nov)
>>>> echo 11
>>>> ;;
>>>> Dec)
>>>> echo 12
>>>> ;;
>>>> *)
>>>> echo 0
>>>> esac
>>>>}
>>>>function returnDay {
>>>> echo $1 | awk -F\| {print'$4'}
>>>>}
>>>>function returnHour {
>>>> echo $1 | awk -F\| {print'$5'} | awk -F: {print'$1'}
>>>>}
>>>>function returnMinute {
>>>> echo $1 | awk -F\| {print'$5'} | awk -F: {print'$2'}
>>>>}
>>>>function returnSecond {
>>>> echo $1 | awk -F\| {print'$5'} | awk -F: {print'$3'}
>>>>}
>>>>function returnTime {
>>>> let Time=`returnMonthNum $1`*24*60*60+`returnDay $1`*24*60*60+`returnHour $1`*60*60+`returnMinute $1`*60+`returnSecond $1`
>>>> echo $Time
>>>>}
>>>>let x=1
>>>>for modified in `stat $1 $2 | grep Modify | sed -e "s/ /|/g"`
>>>> do
>>>> export fileDate$x=$modified
>>>> let x=$x+1
>>>> done
>>>>let fileTime1=`returnTime $fileDate1`
>>>>let fileTime2=`returnTime $fileDate2`
>>>>let timeDiff=$fileTime2-$fileTime1
>>>>if test `returnYear $fileDate1` -gt `returnYear $fileDate2`
>>>> then echo older than 30
>>>> else
>>>> if test $timeDiff -gt 29
>>>> then echo older than 30
>>>> else echo not older than 30
>>>> fi
>>>> fi
>>>>
>>>># -------------------------------- End Example ----------------------------------
>>>>
>>>>--
>>>>-->> mailto:pauldy at wantek.net
>>>>-->> http://www.wantek.net/
>>>>Running ....... Cos anything else would be a waste...
>>>>`:::' ....... ......
>>>>::: * `::. ::'
>>>>::: .:: .:.::. .:: .:: `::. :'
>>>>::: :: :: :: :: :: :::.
>>>>::: .::. .:: ::. `::::. .:' ::.
>>>>.:::.....................::' .::::..
>>>>
>>>>
>>>>-----Original Message-----
>>>>From: discuss-admin at ntlug.org [mailto:discuss-admin at ntlug.org]On Behalf
>>>>Of Sameer Khan
>>>>Sent: Saturday, April 27, 2002 1:51 PM
>>>>To: discuss at ntlug.org
>>>>Subject: [NTLUG:Discuss] How to tell file1 is half an hour older than
>>>>file2?
>>>>
>>>>
>>>>Hello,
>>>>Any ideas how one can go about doing above in
>>>>a ksh script (without GNU tools unfortunately)?
>>>>Thanks for your brain droppings!
>>>>Sameer
>>>>
>>>>
>>>>_______________________________________________
>>>>http://www.ntlug.org/mailman/listinfo/discuss
>>>>
>>>>
>>>>_______________________________________________
>>>>http://www.ntlug.org/mailman/listinfo/discuss
>>>>
>>>>
>>>>
>>
>>--
>>...make every program a filter...
>>
>>
>>_______________________________________________
>>http://www.ntlug.org/mailman/listinfo/discuss
>>
>>
--
...make every program a filter...
More information about the Discuss
mailing list