mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-10-28 18:05:31 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@3267 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd
		
			
				
	
	
		
			109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env perl
 | |
| # IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
 | |
| 
 | |
| #require 'open3.pl';
 | |
| 
 | |
| #This script is a modified version of mtime to be used as part of a sensor in the
 | |
| #software managemnent system. This PERL script goes and finds the latest changed file via mtime
 | |
| # It recurses the directory structure starting with the directory passed in via the command line
 | |
| # (directory routine) and checks each file.
 | |
| #
 | |
| # Result is put to stdout
 | |
| 
 | |
| $mtime    = 0;
 | |
| $startdir = @ARGV[0];
 | |
| chomp($startdir);
 | |
| 
 | |
| if (-d $startdir) { #directory
 | |
|   &directory("/", *mtime);
 | |
| }
 | |
| elsif (-f $startdir) {   #file
 | |
|   my ($dv, $in, $m, $nl, $u, $g, $rd, $siz, $at, $mtime1) = stat($startdir);
 | |
|   $mtime = $mtime1;
 | |
| }
 | |
| else { exit 1; }    #not a recognized format
 | |
| 
 | |
| print $mtime;
 | |
| exit 0;
 | |
| 
 | |
| #
 | |
| # directory
 | |
| #
 | |
| # Goes through directory tree to find files we need to pay attention too.
 | |
| # Each file is checked for mtime.
 | |
| #
 | |
| sub directory
 | |
| {
 | |
|   local ($dir, *mtime, $nlink) = @_;
 | |
|   local ($dev, $ino, $mode, $subcount, $dirtry, $namedirtry, $name1, $name,
 | |
|          $dir1, $mtime1, $dv, $in, $m, $nl, $u, $g, $rd, $siz, $at);
 | |
| 
 | |
|   ($dev, $ino, $nlink) = stat($dir) unless $nlink;
 | |
| 
 | |
|   $dirtry = $startdir;
 | |
|   $dirtry .= $dir;
 | |
| 
 | |
|   $dir1 = substr($dir, 1);
 | |
| 
 | |
|   opendir(DIR, $dirtry);
 | |
| 
 | |
|   local (@filenames) = readdir(DIR);
 | |
| 
 | |
|   if ($nlink == 2)  {
 | |
|     for (@filenames)  {
 | |
|       next if $_ eq '.';
 | |
|       next if $_ eq '..';
 | |
|       #
 | |
|       # Check to see if the mtime of this file is later than the current mtime
 | |
|       #
 | |
|       $name  = "$dir/$_";
 | |
|       $name1 = "$dir1/$_";
 | |
|       $name2 = "/$startdir/$name1";
 | |
| 
 | |
|       ($dv, $in, $m, $nl, $u, $g, $rd, $siz, $at, $mtime1) = stat($name2);
 | |
| 
 | |
|       if ($mtime1 > $mtime)  {
 | |
|         $mtime = $mtime1;
 | |
|       }
 | |
|     }
 | |
|   }
 | |
|   else {
 | |
|     $subcount = $nlink - 2;
 | |
|     for (@filenames)  {
 | |
|       next if $_ eq '.';
 | |
|       next if $_ eq '..';
 | |
| 
 | |
|       #
 | |
|       # Check to see if the mtime of this file is later than the current mtime
 | |
|       #
 | |
| 
 | |
|       $name  = "$dir/$_";
 | |
|       $name1 = "$dir1/$_";
 | |
|       $name2 = "/$startdir/$name1";
 | |
| 
 | |
|       ($dev, $ino, $m, $nl, $u, $g, $rd, $siz, $at, $mtime1) = stat($name2);
 | |
| 
 | |
|       if ($mtime1 > $mtime && !(-d $name2)) {
 | |
|         $mtime = $mtime1;
 | |
|       }
 | |
| 
 | |
|       next if $subcount == 0;
 | |
| 
 | |
|       #
 | |
|       # Recurse into next lower subdirectory
 | |
|       #
 | |
| 
 | |
|       $namedirtry = "/$startdir/";
 | |
|       $namedirtry .= $name;
 | |
| 
 | |
|       ($dev, $ino, $mode, $nlink) = lstat($namedirtry);
 | |
| 
 | |
|       #next unless -d _;
 | |
|       next unless { $nlink > 1 }
 | |
|       &directory($name, *mtime, $nlink);
 | |
| 
 | |
|       --$subcount;
 | |
|     }
 | |
|   }
 | |
| }
 |