On Mon, 29 Dec 2003 13:19:29 -0800, John W. Krahn <[EMAIL PROTECTED]> wrote:

Jesper Noehr wrote:

Hey list.

Hello,


I'm having a problem reading the size of a directory with recursive
directories.
The problem is that du -s shows a different bytecount than my program does.

$ man du


NAME
       du - estimate file space usage

SYNOPSIS
       du [OPTION]... [FILE]...

DESCRIPTION
       Summarize  disk usage of each FILE, recursively for direc­
       tories.


Here's my code:

#!/usr/gnu/bin/perl -w
use File::Find;
@ARGV = ('.') unless @ARGV;
my $sum = 0;
find sub { $sum += -s }, @ARGV;
print "@ARGV contains $sum bytes\n";

'du' shows a size of ~120 megabytes, while the program shows a size of
something that's waaay larger.

Any idea why?

du looks at disk space usage while your program looks at file sizes. If your disk has a block size of 1024 and you have a file that is 10 bytes in size, du will report the amount of space based on the blocks required to store the file, not on the actual size of the file.
Hmm, I see.

$ ls -l test.txt -rw-r--r-- 1 john users 187 Jul 9 11:54 test.txt $ perl -le'print +(lstat shift)[11]' test.txt 4096 $ du -b test.txt 4096 test.txt $ du test.txt 4 test.txt
Great example, thanks. You have any idea how I can rehack my program to return what du does? That is, diskspaceusage.



John



-- Jesper Nøhr - decius <[EMAIL PROTECTED]> Holstebro, Denmark -- http://printf.dk UNIX Administrator, Software Engineer, Geek.

--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>




Reply via email to