<body>

Sitios web relacionados: PingBlog | Fotos

domingo, abril 15, 2007

Estado del tiempo en Norwalk, CT

Varios días perdido del blog, y lo único que vengo a reportar es el estado del tiempo :)

Hoy dia lluvioso hasta mañana, además de que me toca trabajar un poco desde la casa :). Para los interesados, el radar de la zona en tiempo real aquí.

lunes, abril 02, 2007

¿Como contar el espacio usado en un directorio usando Perl?

Una de esas tantas ociosidades que a la final resultan útiles si lo que se quiere es un programa que funcione igual bajo Windows, Linux o Solaris:


#!/usr/bin/perl
use File::Find;
use Getopt::Long;
use strict;

my $func;
my $unit;
my @dirs;
my %units = (
kb => [ 1024.0, "KB"],
mb => [ 1024.0* 1024.0, "MB"],
gb => [ 1024.0 * 1024.0 * 1024.0, "GB" ]
);

GetOptions("dirs=s" => \@dirs, "unit=s" => \$unit);
die "Define the directories to measure" if (scalar(@dirs) == 0);
$unit = "gb" if not defined $unit;
$unit = "gb" if not defined $units{$unit};

{
my $tsize = 0;
$func = sub {
my (
$dev,
$ino,
$mode,
$nlink,
$uid,
$gid,
$rdev,
$size,
$atime,
$mtime,
$ctime,
$blksize,
$blocks) = stat($File::Find::name);
if ( -f ($File::Find::name)) {
$tsize += $size;
}
return $tsize;
}
}

printf "Scanning directories: %s\n", join(',', @dirs);
foreach my $dir (@dirs) {
find({ wanted => $func, follow => 0 }, $dir);
}

printf "Total size of all combined directories: %.2f %s\n",
(&$func) / $units{$unit}[0], $units{$unit}[1];
La salida de ejemplo seria la siguiente:

auyan:~/src/perl/blog josevnz$ ./du.pl -dir /Users/josevnz -dir /tmp -unit pp
Scanning directories: /Users/josevnz,/tmp
Total size of all combined directories: 31.05 GB



Una belleza por lo simple :D

Blogalaxia.com:du, perl
Technorati.com:du, perl

Etiquetas: ,