#!/usr/bin/perl
use strict;
use File::Basename;
# rdir.pl
# by Nicholas Keene, September 2012
# script for candidate evaluation for CHTC
#
# As described on http://research.cs.wisc.edu/condor/hiring/test4/test4.html this script takes one
# directory as a parameter then recursively prints formatted directory and file information for that
# directory without using `ls`.
my ($dirpath) = @ARGV;
# Threshold must be an integer
if (-d $dirpath) {
RecursivelyPrintDir($dirpath);
} else {
print "Specified path must be a directory.\n";
}
# RecursivelyPrintDir
# Takes the name of a directory (note: does not verify the directory)
# Prints directory name and all regular files within it
# Then recursively calls itself on all dirs within it
sub RecursivelyPrintDir {
my ($dirpath, @dirs);
$dirpath = shift;
printf "Directory <%s>\n", $dirpath;
foreach my $file (<$dirpath/*>) {
if(-d $file) {
push (@dirs, $file);
} else {
my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat $file;
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime($mtime);
printf " %10s %4s-%02s-%02s %02s:%02s:%02s %s\n", $size, $year+1900, $mon, $mday, $hour, $min, $sec, basename($file);
}
}
print "\n";
foreach $dirpath (@dirs) {
RecursivelyPrintDir($dirpath);
}
}
I don't have a lot to say, but this is my little bit.
Saturday, October 27, 2012
rdir.pl - Recursively Print Directories
This code prints out a recursive list of directories without ever using the `ls` command. This code instead uses the perl `stat` function to get information about a file.
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment