Beefy Boxes and Bandwidth Generously Provided by pair Networks
Just another Perl shrine
 
PerlMonks  

Re^5: fast count files

by BrowserUk (Patriarch)
on Jan 06, 2012 at 12:19 UTC ( [id://946588]=note: print w/replies, xml ) Need Help??


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:

  • Download yourself a copy of wc.exe for Windows.

    It is easy to find and its a program that is just to useful to be without.

  • Use attrib /s c:\* | perl -nE"}{say $."

    It is a poor substitute but works for this use.

  • Use the suggestion by cdarke.

    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]

With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.

The start of some sanity?

Replies are listed 'Best First'.
Re^6: fast count files
by gautamparimoo (Beadle) on Jan 06, 2012 at 12:30 UTC

    thanks guys I tried with win32::Ole , File::Find and word count(linux one see above thread)method .Win32::Ole and wc give almost the same time .. So is there a way to count even faster that that??

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://946588]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others about the Monastery: (4)
As of 2024-04-19 22:56 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found