Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re^2: Fastest way to calculate directory size in linux

by Marshall (Abbot)
on Feb 01, 2012 at 11:23 UTC ( #951184=note: print w/replies, xml ) Need Help??

in reply to Re: Fastest way to calculate directory size in linux
in thread Fastest way to calculate directory size in linux

I just did some testing with du on my Windows machine. This does "work", but it is not fast - I doubt any faster than File::Find. It visits every file and adds the sizes up - this takes awhile! Its a lot slower than the "properties" click button in the Windows file manager. Satisfying both "fast" and "multi-platform" simultaneously is a pretty tall order.

maybe if we look at your File::Find code, we can see some improvements?

Update: This is the fastest way that I know how, that also satisfies "multi-platform". This code runs on my Windows machine.

#!/usr/bin.perl -w use strict; use File::Find; my $byte_total; my $file_total; find (\&sum_bytes, "C:/temp"); sub sum_bytes { return() unless (-f $File::Find::name); $byte_total += -s _; # not a typo! # "_" different than "$_"! # see [id://951317] $file_total++; } print "total bytes in C:/temp: $byte_total in $file_total files\n"; # prints on my Windows system: # total bytes in C:/temp: 656201485 in 2554 files
One "expensive" file operation is run for each file system entry. The results of that "file system query", "stat" operation are re-used in a subsequent file operation. This is multi-platform, but not completely optimal for Windows NTFS.

You can get "fastest" and you can get "multi-platform", but not both together. There is a Windows NTFS way to get this number faster. But this is the "fastest" multi-platform solution of which I am aware.

Replies are listed 'Best First'.
Re^3: Fastest way to calculate directory size in linux
by JavaFan (Canon) on Feb 01, 2012 at 11:55 UTC
    File::Find has to visit all files as well... And while I don't claim to have any Windows related knowledge, I do know that on Unix, you'll have to visit all files (or rather, their inodes) to calculate the "size of the directory".

      Indeed, if there was a faster, portable way to calculate the space taken up by a directory, I'm sure that the GNU folk would have coded "du" to use the faster method.

Re^3: Fastest way to calculate directory size in linux
by Anonymous Monk on Feb 02, 2012 at 10:20 UTC

    Thanks for the script but it does'nt give the correct size of the directory(maybe some system files etc issue)

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://951184]
[Discipulus]: ah so there are also coccurence of 'good' weather? ;=)

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (6)
As of 2018-01-17 07:59 GMT
Find Nodes?
    Voting Booth?
    How did you see in the new year?

    Results (196 votes). Check out past polls.