2008-02-08 17:59:49 +00:00
|
|
|
#!/usr/bin/env perl
|
|
|
|
# IBM(c) 2007 EPL license http://www.eclipse.org/legal/epl-v10.html
|
|
|
|
|
2009-04-28 13:36:28 +00:00
|
|
|
#require 'open3.pl';
|
2008-02-08 17:59:49 +00:00
|
|
|
|
|
|
|
#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;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|