Solved

How to make a list of xth latest files in a dir and sub-dir?

Posted on 2003-11-06
5
242 Views
Last Modified: 2013-12-25
I'm looking for a script that will search through a dir and its subdirs and return in a list (html file),  the 10 or 20 most recent files, according to last modified timestamp (regardless of file type). Preferably the list will have a link to each of the files (the dir is a sub dir of my htdocs folder). I'm running Apache 2.0.48 on Win XpPro and have perl 5.6.1 installed. No real experience with perl so don't get too techie on me!!! ;-)

Thanks Robin
0
Comment
Question by:irlrobins
  • 4
5 Comments
 
LVL 84

Accepted Solution

by:
ozo earned 50 total points
Comment Utility
use CGI qw/:standard/;
use File::Find;
@dirstosearch=("/path/to/dir");
find( sub{push@list,[-M,$File::Find::name] }, @dirstosearch);
print header,start_html("list of 20 latest files")
for( (sort $a->[0]<=>$b->[0],@list)[0..19] ){
    print qq(<a href="http://mysite.com/$_->[1]">$_->[1]</a><br>);
}
print end_html;
0
 

Author Comment

by:irlrobins
Comment Utility
Thanks ozo. I'll try it out tomorrow and if it works the points are yours!
0
 

Author Comment

by:irlrobins
Comment Utility
Ok I tried that and i get the a Server 500 error. Here's whats in the error logs:
[Fri Nov 07 12:09:30 2003] [error] [client xxxx] Premature end of script headers: list.cgi
[Fri Nov 07 12:09:30 2003] [error] [client xxxx] syntax error at C:/Program Files/Apache Group/Apache2/cgi-bin/list.cgi line 8, near "){"
[Fri Nov 07 12:09:30 2003] [error] [client xxxx] Execution of C:/Program Files/Apache Group/Apache2/cgi-bin/list.cgi aborted due to compilation errors.

Line 8 is "for( (sort $a->[0]<=>$b->[0],@list)[0..19] ){"

Whats the prob?

Thanks again
0
 

Author Comment

by:irlrobins
Comment Utility
Ok i added a ';' to the end of line 7 "print header,start_html("list of 20 latest files")"

Script now runs and returns a list of 20 files. But they're not the most recent ones. In fact I've no idea why it picks the files that it does....
0
 

Author Comment

by:irlrobins
Comment Utility
ok I've fixed it. I've changed the ozo's solution slightly:

a) to fix his errors (haven't you heard of testing?? ;-) )
b) it now only lists files that end in .txt and .jpg and no directories), Also using substr so i can formulate a proper url (it was adding extra dir's to the path)

Anyway Ozo's points are yours. Thanks for your help. Appreciate it. (solution follows)

#!/usr/bin/perl -w

use CGI qw/:standard/;
use File::Find;

@dirstosearch=("../htdocs/access/");
find ( sub  
      {
      if ((!-d)&&((/\.txt$/)||(/\.jpg$/))) #will not push dir's or files that don't end with txt or jpg to the array
      {
      push@list,[-M,$File::Find::name]
      }
      }, @dirstosearch);
print header,start_html("The 20 most Recent Files");
for( (sort {$a->[0]<=>$b->[0]}@list)[0..19] ){
  $substring1=substr($_->[1],9); #substring to from correct url
  $substring2=substr($_->[1],19); #substring to form visible link in correct format
  print qq(<a href="http://mysite.ie$substring1">$substring2</a><br>);
}
print end_html;
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

Suggested Solutions

Introduction This tutorial will give you a fast look what you can do with WhizBase. I expect you already know how to work with HTML at least, and that you understand the basics of the internet and how the internet works. WhizBase is a server-s…
This article is meant to give a basic understanding of how to use R Sweave as a way to merge LaTeX and R code seamlessly into one presentable document.
Learn the basics of modules and packages in Python. Every Python file is a module, ending in the suffix: .py: Modules are a collection of functions and variables.: Packages are a collection of modules.: Module functions and variables are accessed us…
Learn the basics of while and for loops in Python.  while loops are used for testing while, or until, a condition is met: The structure of a while loop is as follows:     while <condition>:         do something         repeate: The break statement m…

763 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now