Finding the size of a large file

J

John N.

I am new to Perl. I have a Sun box running Solaris 8 and the Perl that
comes with the OS.

I pulled some code off of Sun's site that searches a directory tree
and finds big files. When I run the program it works except that it
does not find files over 5 GB.

I have done a few things to trouble shoot the code and I found that it
fails in two places. On the line of "elsif ((-f _) && (! -l $path))"
the file fails the -f switch test. When I do a ls -l on the directory
it shows that the file is a normal file with the same rights as the
other files in the directory. Then I took "-f _" logic check out and
printed the result of the "$size = -s $path;" code and the -s returns
a blank for the size.

Do I have to do differant things with large files? Are there bugs or
limitations on the -f and -s switches? How do I make the code work?

Thanks for your help,

John

#
# scan throught the directory tree
#

&traverse('.');

sub traverse {
local($dir) = shift;
local($path);
unless (opendir(DIR, $dir)) {
warn "Can't open $dir\n";
closedir(DIR);
return;
}
foreach (readdir(DIR)) {
next if $_ eq '.' || $_ eq '..';
$path = "$dir/$_";
if ((-d $path) && (! -l $path)) { # non-symlink dir, enter it
&traverse($path);
} elsif ((-f _) && (! -l $path)) { # plain file, but not a
symlink
$size = -s $path; # get the size in bytes
$ksize = $size / 1000; # convert to megabytes
if ($size > $minsize) {
$age = -A $path; # get the age in days
printf "%9d Kilobytes %4d days
%s\n",$ksize,int($age),$path;
}
}
}
closedir(DIR);
}
 
M

Michael P. Broida

John N. said:
I am new to Perl. I have a Sun box running Solaris 8 and the Perl that
comes with the OS.

I pulled some code off of Sun's site that searches a directory tree
and finds big files. When I run the program it works except that it
does not find files over 5 GB.

The largest number that can be held in a 32-bit integer
(unsigned) is 4,294,967,295.

That's 4.29+ Gig. Since you mention 5GB in your post,
I'm thinking that the size is beyond what the code
can handle.

If I'm correct, then it's seeing that 5GB file as
being 5,000,000,000 - 4,294,967,295 = 705,032,705
or about 705MB. If you were searching for files
larger than 700MB, this one should still show up.
But if you're looking for files over 1GB, it won't.

Mike
 
N

Nicholas Dronen

JN> I am new to Perl. I have a Sun box running Solaris 8 and the Perl that
JN> comes with the OS.
JN>
JN> I pulled some code off of Sun's site that searches a directory tree
JN> and finds big files. When I run the program it works except that it
JN> does not find files over 5 GB.

JN> I have done a few things to trouble shoot the code and I found that it
JN> fails in two places. On the line of "elsif ((-f _) && (! -l $path))"
JN> the file fails the -f switch test. When I do a ls -l on the directory
JN> it shows that the file is a normal file with the same rights as the
JN> other files in the directory. Then I took "-f _" logic check out and
JN> printed the result of the "$size = -s $path;" code and the -s returns
JN> a blank for the size.

JN> Do I have to do differant things with large files? Are there bugs or
JN> limitations on the -f and -s switches? How do I make the code work?

Is there any mention of large files in the output of perl -V:ccflags?

Regards,

Nicholas
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,580
Members
45,054
Latest member
TrimKetoBoost

Latest Threads

Top