[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