{"id":1144,"date":"2007-04-02T19:54:00","date_gmt":"2007-04-03T02:54:00","guid":{"rendered":"http:\/\/kodegeek.com\/blog\/?p=1144"},"modified":"2007-04-02T19:54:00","modified_gmt":"2007-04-03T02:54:00","slug":"%c2%bfcomo-contar-el-espacio-usado-en-un-directorio-usando-perl","status":"publish","type":"post","link":"http:\/\/kodegeek.com\/blog\/2007\/04\/02\/%c2%bfcomo-contar-el-espacio-usado-en-un-directorio-usando-perl\/","title":{"rendered":"\u00bfComo contar el espacio usado en un directorio usando Perl?"},"content":{"rendered":"<p>Una de esas tantas ociosidades que a la final resultan \u00fatiles si lo que se quiere es un programa que funcione igual bajo Windows, Linux o Solaris:<\/p>\n<pre><br \/>#!\/usr\/bin\/perl<br \/>use File::Find;<br \/>use Getopt::Long;<br \/>use strict;<br \/><br \/>my $func;<br \/>my $unit;<br \/>my @dirs;<br \/>my %units = (<br \/>      kb => [ 1024.0,  \"KB\"],<br \/>      mb => [ 1024.0* 1024.0, \"MB\"],<br \/>      gb => [ 1024.0 * 1024.0 * 1024.0, \"GB\" ]<br \/>);<br \/><br \/>GetOptions(\"dirs=s\" => \\@dirs, \"unit=s\" => \\$unit);<br \/>die \"Define the directories to measure\" if (scalar(@dirs) == 0);<br \/>$unit = \"gb\" if not defined $unit;<br \/>$unit = \"gb\" if not defined $units{$unit};<br \/><br \/>{<br \/>      my $tsize = 0;<br \/>      $func = sub {<br \/>              my (<br \/>                      $dev,<br \/>                      $ino,<br \/>                      $mode,<br \/>                      $nlink,<br \/>                      $uid,<br \/>                      $gid,<br \/>                      $rdev,<br \/>                      $size,<br \/>                      $atime,<br \/>                      $mtime,<br \/>                      $ctime,<br \/>                      $blksize,<br \/>                      $blocks) = stat($File::Find::name);<br \/>              if ( -f ($File::Find::name)) {<br \/>                      $tsize += $size;<br \/>              }<br \/>              return $tsize;<br \/>      }<br \/>}<br \/><br \/>printf \"Scanning directories: %s\\n\", join(',', @dirs);<br \/>foreach my $dir (@dirs) {<br \/>      find({ wanted => $func, follow => 0 }, $dir);<br \/>}<br \/><br \/>printf \"Total size of all combined directories: %.2f %s\\n\",<br \/>      (&$func) \/ $units{$unit}[0], $units{$unit}[1];<br \/><\/pre>\n<p>La salida de ejemplo seria la siguiente:<\/p>\n<pre><br \/>auyan:~\/src\/perl\/blog josevnz$ .\/du.pl -dir \/Users\/josevnz -dir \/tmp -unit pp<br \/>Scanning directories: \/Users\/josevnz,\/tmp<br \/>Total size of all combined directories: 31.05 GB<br \/><\/pre>\n<p>Una belleza por lo simple \ud83d\ude00<\/p>\n<p>Blogalaxia.com:<a href=\"http:\/\/www.blogalaxia.com\/tags\/du\">du<\/a>, <a href=\"http:\/\/www.blogalaxia.com\/tags\/perl\">perl<\/a><br \/>Technorati.com:<a href=\"http:\/\/technorati.com\/tag\/du\">du<\/a>, <a href=\"http:\/\/technorati.com\/tag\/perl\">perl<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una de esas tantas ociosidades que a la final resultan \u00fatiles si lo que se quiere es un programa que funcione igual bajo Windows, Linux o Solaris: #!\/usr\/bin\/perluse File::Find;use Getopt::Long;use strict;my $func;my $unit;my @dirs;my %units = ( kb => [ 1024.0, &#8220;KB&#8221;], mb => [ 1024.0* 1024.0, &#8220;MB&#8221;], gb => [ 1024.0 * 1024.0 * <a class=\"read-more\" href=\"http:\/\/kodegeek.com\/blog\/2007\/04\/02\/%c2%bfcomo-contar-el-espacio-usado-en-un-directorio-usando-perl\/\">[&hellip;]<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[],"tags":[88,89],"_links":{"self":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/1144"}],"collection":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/comments?post=1144"}],"version-history":[{"count":0,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/posts\/1144\/revisions"}],"wp:attachment":[{"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/media?parent=1144"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/categories?post=1144"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/kodegeek.com\/blog\/wp-json\/wp\/v2\/tags?post=1144"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}