Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling
 
PerlMonks  

Re: Re: Re: Categorize files in directory

by sunadmn (Curate)
on Oct 16, 2003 at 18:46 UTC ( #299839=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: Categorize files in directory
in thread Categorize files in directory

Ok so let's get this straight then you want to READ the files and depending o the number of "FULL" lines in them sort the files into different directories or just a file with a count of how man of each there are??


Comment on Re: Re: Re: Categorize files in directory
Re: Re: Re: Re: Categorize files in directory
by kris2000 (Initiate) on Oct 16, 2003 at 18:50 UTC

    I have used the code by l2kashe:

    Looks like its moving everything from one directory to the other.

    #!/usr/bin/perl use strict; my $data = '/path/to/base/dir'; my $multi = '/path/to/multi/full/dir'; my $single = '/path/to/single/full/dir'; opendir(DATA, $data) or die "Cant opendir $data: $!\n"; for ( grep !/^\./, readdir(DATA) ) { my $in = "$data/$_"; open(IN, $in) or die "Cant open $in: $!\n"; my $count = grep /^(?:\s+|)FULL/, <IN>; close(IN); if ( $count >= 2 ) { rename($in, "$multi/$_") or (warn "Couldnt move $_ to $multi: $!\n" and next); } else { rename($in, "$single/$_") or (warn "Couldnt move $_ to $single: $!\n" and next); } } # END for grep closedir(DATA)

    Edit, BazB: close code tag, remove random characters.

      Im going to go out on a limb, and make an assumption that files are the only files in said directory, and that 'full' will only occur around the beginning of a line. With that said

      #!/usr/bin/perl use strict; my $data = '/path/to/base/dir'; my $multi = '/path/to/multi/full/dir'; my $single = '/path/to/single/full/dir'; opendir(DATA, $data) or die "Cant opendir $data: $!\n"; for ( grep !/^\./, readdir(DATA) ) { my $in = "$data/$_"; open(IN, $in) or die "Cant open $in: $!\n"; my $count = grep /^(?:\s+|)FULL/, <IN>; close(IN); if ( $count >= 2 ) { rename($in, "$multi/$_") or (warn "Couldnt move $_ to $multi: $!\n" and next); } else { rename($in, "$single/$_") or (warn "Couldnt move $_ to $single: $!\n" and next); } } # END for grep closedir(DATA);

      Edit: added test for success on rename :P..

      use perl;

      I just need to copy files from the source into 2 different directories + one with single header and the other with multiple headers! ANy help would be appreciated...thanks a lot! Global symbol "$data" requires explicit package name at test3_final.pl + line 4. Global symbol "$ONE" requires explicit package name at test3_final.pl +line 5. Global symbol "$TWO" requires explicit package name at test3_final.pl +line 6. Global symbol "$data" requires explicit package name at test3_final.pl + line 8. Global symbol "$data" requires explicit package name at test3_final.pl + line 8. Global symbol "$data" requires explicit package name at test3_final.pl + line 11. Global symbol "$TWO" requires explicit package name at test3_final.pl +line 18. Global symbol "$ONE" requires explicit package name at test3_final.pl +line 21. Execution of test3_final.pl aborted due to compilation errors. use strict; $data = "/export/home/credpol03/e7uryp/PERL/test"; $ONE = "/export/home/credpol03/e7uryp/PERL/ONE"; $TWO = "/export/home/credpol03/e7uryp/PERL/TWO"; opendir(DATA, $data) or die "Cant opendir $data: $!\n"; for ( grep !/^\./, readdir(DATA) ) { my $in = "$data/$_"; open(IN, $in) or die "Cant open $in: $!\n"; my $count = grep /^(?:\s+|)FULL/, <IN>; close(IN); if ( $count >= 2 ) { rename($in, "$multi/$_"); } else { rename($in, "$single/$_"); } } # END for grep closedir(DATA);

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others lurking in the Monastery: (12)
As of 2014-10-21 14:34 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (105 votes), past polls