in reply to Re^4: fast count files
in thread fast count files
But I have 2 use my @files = `attrib /s c:\\*`; my $n = scalar @files;
I did warn you against loading the entire list into perl. It really slows things down.
as without it says that wc is an unrecognised command
There are various cures for that possible:
It is easy to find and its a program that is just to useful to be without.
It is a poor substitute but works for this use.
Simple and effective.
But I remembered a faster method. This uses the Windows Script Host to do the donkey work via Win32::OLE and runs 3 times faster on my machine.
2:14 instead of 6:40 on my machine. It also counts the directries as it goes which may or may not be useful to you:
#! perl -slw use strict; use Time::HiRes qw[ time ]; use Win32::OLE qw[in]; my $start = time; my $fso = Win32::OLE->new( 'Scripting.FileSystemObject' ); my @folders = $fso->GetFolder( $ARGV[0] ); my $cFolders = 0; my $cFiles = 0; while( @folders ) { local $^W; my $folder = pop @folders; $cFiles += $folder->Files->Count; $cFolders += $folder->Subfolders->Count; for my $subFolder ( in $folder->SubFolders ) { $cFiles += $subFolder->Files->Count; $cFolders += $subFolder->SubFolders->Count; push @folders, $_ for in $subFolder->SubFolders ; } } my $seconds = time - $start; my $minutes = int( $seconds / 60 ); $seconds %= 60; printf "Folders:$cFolders Files:$cFiles [%u:%.2f]\n", $minutes, $seconds; __END__ [12:05:12.81] c:\test>countFiles c:\ Folders:68860 Files:1234105 [2:14.00]
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^6: fast count files
by gautamparimoo (Beadle) on Jan 06, 2012 at 12:30 UTC | |
by Sinistral (Monsignor) on Jan 06, 2012 at 13:44 UTC |