-#!/usr/bin/perl
+#!/usr/bin/env perl
+#
+# Copyright (C) 2006 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
use strict;
-sub get_ts($) {
+sub get_ts($$) {
my $path = shift;
+ my $options = shift;
my $ts = 0;
- open FIND, "find $path -not -path \\*.svn\\* -and -not -path \\*CVS\\* 2>/dev/null |";
+ my $fn = "";
+ $path .= "/" if( -d $path);
+ open FIND, "find $path -type f -and -not -path \\*.svn\\* -and -not -path \\*CVS\\* $options 2>/dev/null |";
while (<FIND>) {
- open FILE, "<$_";
- my @stat = stat FILE;
- close FILE;
- $ts = $stat[9] if ($stat[9] > $ts);
+ chomp;
+ my $file = $_;
+ next if -l $file;
+ my $mt = (stat $file)[9];
+ if ($mt > $ts) {
+ $ts = $mt;
+ $fn = $file;
+ }
}
close FIND;
- return $ts;
+ return ($ts, $fn);
}
(@ARGV > 0) or push @ARGV, ".";
my $ts = 0;
my $n = ".";
my %options;
-foreach my $path (@ARGV) {
- if ($path =~ /^-/) {
+while (@ARGV > 0) {
+ my $path = shift @ARGV;
+ if ($path =~ /^-x/) {
+ my $str = shift @ARGV;
+ $options{"findopts"} .= " -and -not -path '".$str."'"
+ } elsif ($path =~ /^-f/) {
+ $options{"findopts"} .= " -follow";
+ } elsif ($path =~ /^-n/) {
+ my $arg = $ARGV[0];
+ $options{$path} = $arg;
+ } elsif ($path =~ /^-/) {
$options{$path} = 1;
} else {
- my $tmp = get_ts($path);
+ my ($tmp, $fname) = get_ts($path, $options{"findopts"});
if ($tmp > $ts) {
- $n = $path;
+ if ($options{'-F'}) {
+ $n = $fname;
+ } else {
+ $n = $path;
+ }
$ts = $tmp;
}
}
}
-if ($options{"-p"}) {
+if ($options{"-n"}) {
+ exit ($n eq $options{"-n"} ? 0 : 1);
+} elsif ($options{"-p"}) {
print "$n\n";
} elsif ($options{"-t"}) {
print "$ts\n";