mirror of
				https://github.com/xcat2/xcat-core.git
				synced 2025-11-04 05:12:30 +00:00 
			
		
		
		
	git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@1722 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;
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 |