Find the latest or newest modified file in a folder or directory with Perl

I’ve worked on and off with Perl, but really want to be more proficient with it. I will do more automation with Perl and will share it here for my reader and as a reference for myself. I just created a Perl tag on this blog.

Here is one script I cooked out today. It takes a directory / folder name as input, and return the latest or newest modified file. Suggestions welcome!

#use File::Copy;
use File::stat;

$dirname = shift or die "Please provide a directory to search for";
$timediff=0;

opendir DIR, "$dirname";

while (defined ($file = readdir(DIR)))
{
	if($file ne "." && $file ne "..")
	{
		$diff = time()-stat("$dirname/$file")->mtime;
		if($timediff == 0)
                       {
                       	$timediff=$diff;
                       	$newest=$file;
                       }
                if($diff<$timediff)
		       {
                       	$timediff=$diff;
                       	$newest=$file;
                       }
        }
}

print $newest,"\n";

#copy("$dirname/$newest", "c:/work/$newest");

2 Comments »

  1. Daniel Howard Said,

    June 27, 2008 @

    You can also use ls -t:


    0-13:19 djh@ratchet ~> ls -lt | grep ^- | head -1
    -rw-r--r-- 1 djh djh 7477585 Mar 30 14:38 djh_wordpress-2008-03-30.sql

  2. Haidong Ji Said,

    June 27, 2008 @

    That’s really cool: grep for files, and then take the first line, I learned something already!

    Google is good, but sometimes a live and breathing expert can cut through the noise and point you to the right direction. Thanks!

    The script I wrote was intended primarily for work on Windows. I am digging the here document, along with variable interpolation to generate some cool sql script.

    Thanks for sharing!

RSS feed for comments on this post · TrackBack URI

Leave a Comment