#! /usr/bin/perl
use strict;
my $timezone = "JST";
my $dir = shift @ARGV;
opendir DIR, $dir;
print <<_EOF;
<?xml version="1.0" ?>
<filelist>
_EOF
while ($_ = readdir(DIR)) {
next if ($_ eq '..');
my @stat = stat("$dir/$_");
my $fname = $_;
my $realname = $_;
my @tms = map do {
my @lt = localtime($stat[$_]);
sprintf("%04d-%02d-%02d %02d:%02d:%02d %s",
$lt[5] + 1900, $lt[4] + 1, $lt[3],
$lt[2], $lt[1], $lt[0],
$timezone);
}, (7, 8, 9);
my $mode = $stat[2];
my $is_directory = ($mode & 0040000)? "yes" : "no"; # directory?
my $md5sum = "";
if (-f "$dir/$fname" and -r "$dir/$fname") { # get MD5 sum if readable file
my $path = "$dir/$fname";
$path =~ s/'/\\'/g;
my $cmd = "md5sum '" . $path . "'";
`$cmd` =~ /^([^ ]*)[ ]/;
$md5sum = "$1";
}
chomp $md5sum;
$mode = sprintf("%o", ($mode & ~0140000));
print <<_EOF;
<file name="$fname" directory="$is_directory"
mode="$mode" size="$stat[7]"
md5sum="$md5sum"
atime="$tms[0]" ctime="$tms[2]" />
_EOF
}
closedir DIR;
print "</filelist>\n";
|