use strict; use warnings; use feature 'say'; use File::Find::Rule; my $dir = 'C:\testdir'; if ($#ARGV >= 0) {$dir = $ARGV[0];} my $rule = File::Find::Rule->new; my @items = $rule->in($dir); my @fields = ("dev","ino","mode","nlink","uid","gid","rdev","size","atime", "mtime","ctime","blksize","blocks"); my %num; my $index = 0; foreach my $field (@fields) { $num{$field} = $index; $index++; } foreach my $item (@items) { my $type = (-f $item) ? 'file' : (-l $item) ? 'symbolic link' : (-d $item) ? 'directory' : (-b $item) ? 'block special file' : (-c $item) ? 'character special file' : (-p $item) ? 'named pipe' : (-S $item) ? 'socket' : 'unkown'; my (@lstat) = lstat $item; my %times; foreach my $time ("atime","ctime","mtime") { $times{$time} = localtime($lstat[$num{$time}]); } my $size = commify($lstat[$num{'size'}]); my $perms = sprintf "%04o", $lstat[$num{'mode'}] & 07777; $item =~ s|\/|\\|g; say "Found item '$item'"; say " Type: $type"; say " Permissions: $perms"; say " Size: $size bytes"; say " Access Time: $times{'atime'}"; say " Inode change time: $times{'ctime'}"; say " Last modify time: $times{'mtime'}"; say "\n"; } sub commify { my $input = shift; $input = reverse $input; $input =~ s/(\d\d\d)(?=\d)(?!\d*\.)/$1,/g; return reverse $input; } #### Found item 'C:\testdir' Type: directory Permissions: 0777 Size: 0 bytes Access Time: Wed Aug 20 10:49:37 2014 Inode change time: Wed Aug 20 10:47:33 2014 Last modify time: Wed Aug 20 10:49:37 2014 Found item 'C:\testdir\cmd.lnk' Type: file Permissions: 0666 Size: 1,197 bytes Access Time: Wed Aug 20 10:48:44 2014 Inode change time: Wed Aug 20 10:48:44 2014 Last modify time: Wed Aug 20 10:49:37 2014 Found item 'C:\testdir\test1.txt' Type: file Permissions: 0666 Size: 14 bytes Access Time: Wed Aug 20 10:48:08 2014 Inode change time: Wed Aug 20 10:48:08 2014 Last modify time: Wed Aug 20 10:50:15 2014 Found item 'C:\testdir\test2.txt' Type: file Permissions: 0666 Size: 17 bytes Access Time: Wed Aug 20 10:48:20 2014 Inode change time: Wed Aug 20 10:48:08 2014 Last modify time: Wed Aug 20 10:50:24 2014 Found item 'C:\testdir\dir1' Type: directory Permissions: 0777 Size: 0 bytes Access Time: Wed Aug 20 10:50:30 2014 Inode change time: Wed Aug 20 10:48:33 2014 Last modify time: Wed Aug 20 10:50:30 2014 Found item 'C:\testdir\dir1\cmd.lnk' Type: file Permissions: 0666 Size: 1,197 bytes Access Time: Wed Aug 20 10:50:30 2014 Inode change time: Wed Aug 20 10:50:30 2014 Last modify time: Wed Aug 20 10:49:37 2014 Found item 'C:\testdir\dir1\test1.txt' Type: file Permissions: 0666 Size: 14 bytes Access Time: Wed Aug 20 10:50:30 2014 Inode change time: Wed Aug 20 10:50:30 2014 Last modify time: Wed Aug 20 10:50:15 2014 Found item 'C:\testdir\dir1\test2.txt' Type: file Permissions: 0666 Size: 17 bytes Access Time: Wed Aug 20 10:50:30 2014 Inode change time: Wed Aug 20 10:50:30 2014 Last modify time: Wed Aug 20 10:50:24 2014