デフォルトでは、以下のコードは現在の作業ディレクトリの下のサブツリーを検索します。コマンドラインで、検索するサブツリーをもう1つ指定することもできます。
#! /usr/bin/env perl
use strict;
use warnings;
use File::Find;
my($newest_mtime,$path);
sub remember_newest {
return if -l || !-f _;
my $mtime = (stat _)[9];
($newest_mtime,$path) = ($mtime,$File::Find::name)
if !defined $newest_mtime || $mtime > $newest_mtime;
}
@ARGV = (".") unless @ARGV;
for (@ARGV) {
if (-d) {
find \&remember_newest, @ARGV;
}
else {
warn "$0: $_ is not a directory.\n";
}
}
if (defined $path) {
print scalar(localtime $newest_mtime), "\t", $path, "\n";
}
else {
warn "$0: no files processed.\n";
exit 1;
}
書かれているように、コードはシンボリックリンクをたどりません。コマンドラインでシンボリックリンクに名前を付けると、次の出力が表示されます。
$ ./find-newest〜/link-to-directory
./find-newest:ファイルは処理されません。
bashでは、間接参照を強制するために末尾にスラッシュを追加する必要があります。
$ ./find-newest〜/ link-to-directory /
1月1日木曜日00:00:001970hello-world