#!/usr/bin/perl -w use File::Find; sub AddBlocks { my ($target,$b) = @_; $blocks{$target}+=$b; } sub wanted { my ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = lstat($_); if ($seen{$ino}) { # we've counted some other pointer to this hardlink before return; } else { $seen{$ino} = 1; } if (-f _) { AddBlocks($File::Find::dir,$blocks); } elsif (-d _) { AddBlocks($File::Find::name,$blocks); } } File::Find::find({wanted => \&wanted}, '.'); foreach $dir (sort {$blocks{$b} <=> $blocks{$a}} keys %blocks) { $blocks{$dir}/=2; printf "%10d %s\n",$blocks{$dir},$dir; }