time stamp of file create

Hi,

Sounds a simple request but I also need (would like) to gather the seconds too. I'm not even sure if this is held. I would think it is, somewhere??!!?!

I belive that stat would/could work but I don't do C (we'll not yet).

Is there any comamnd line util I can use?

SunOS.

Cheers and beers,
Neil

Unix does not store the file's creation time.

perl version for inodetime

#!/usr/contrib/bin/perl
#^###################################################################
#^ $Header: inodetime.pl,v 1.1 97/01/20 10:17:00 http srvr? $
#^###################################################################
#^ PROGRAM DESCRIPTION
#^ -------------------
#^ This program prints the modification times and names 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:
#^           $ inodetime.pl /tmp/t*
#^           19961115105425 /tmp/test.sql 
#^           19970116113616 /tmp/tststat.pl 
#^ 
#^ TRICK To Remember The Program Name
#^ ----------------------------------
#^     inodetime == I No De Time
#^     ^^ ^ ^ 
#^                                                                KSG 
#^###################################################################

############################################
# 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 $curfile\n");
      }
   ########################################
   # Shift to next position in command line
   ########################################
   shift (@ARGV);
}


#~###################################################################
#~###################################################################
#~
#~ $Log:	inodetime.pl,v $
#~ Revision 1.1  97/01/20  10:17:00  10:17:00  http ()
#~ reversed output
#~ from: filename date
#~ to:   date filename
#~ 
#~ Revision 1.0  97/01/17  12:37:32  12:37:32  http ()
#~ Initial revision
#~ 
#~###################################################################
#~###################################################################


Sort of the same thing in C - using stat

/* this displays files times to the second: ctime & mtime */
/* usage filetime <file name> [file name...[]] -  for HPUX */

/* jmc 4/25/1997 10:09AM */

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <sys/stat.h>   
#include <string.h>
#include <errno.h>


void statfile(char *, struct stat *);
void usage(void); 
void bail(void);  
void filetimes(char *, struct stat *);    

int main(int argc, char *argv[]){      
       struct stat st;
       int i=0;    
       char tmp[256]={'\0'};
       if(argc <2) usage();       
       for(i=1; i<argc;i++){       
               strcpy(tmp,argv);
               statfile(tmp,&st);
               filetimes(tmp,&st);            
       }        
       
       return 0;
}                         
void filetimes(char *fname,struct stat *st){  /* display the file times */
       struct tm *tmptr;            
       struct stat lst;           
       char output[91]={'\0'};
       lst = *st;   
       printf("File times for %s\n",fname);
       tmptr=localtime(&lst.st_atime);
       strftime(output,80,"Last status change: %D %T",tmptr);
       printf("\t%s\n",output);
       tmptr=localtime(&lst.st_mtime);
       strftime(output,80,"Last modify time  : %D %T",tmptr);
       printf("\t%s\n",output);

       
}
void statfile(char *fname, struct stat *st){
       int result=0;   
       result=stat(fname,st);
       if(result == (-1)) bail();
}               
void usage(void){
    printf("usage:  filetime <filenames> \n");  
    bail();
}                

void bail(void){
    if (errno) perror("Fatal error");
    exit(EXIT_FAILURE);
}

                 

Many thanks....Perl solution is great.

Cheers and beers,
Neil

Jim,

I'm a bit confused. I was under the impression that Unix doesnt track the create time of a file.

Isnt your script tracking i-node changes? In which case the time would change when someone does a chown or chmod.

I've just tried the perl script version and it just brings back the last time the file was updated.

I think nhatch wanted the time the file was actually created, which ( as has been said) isn't stored ...

That's correct: there is no creation date. The C code gives the two possible dates:

status change date & time, modified date & time.