thanks bart!

i used your idea and can confirm it works with the script below
on osX.

i would have liked to be able to supply the start-directory
(my $dir)
as argument on the commandline, do you know how i would do
that if possible and not mess up @ARGV at the same time?

thanks again
../allan

#!/usr/bin/perl -pi

BEGIN {
    use Text::Tabs; 
    $tabstop = 4;
    @ARGV = ();
    my $global_delimiter = "/";
    
    my $dir = "/Volumes/os9/Desktop Folder/test";
    chdir($dir) or die $!;
    &find($dir);
    
    sub find {
        my($dir, $func) = @_;
        local (*FOLDER);
        my(@subfiles, $file, $specfile);
    
        opendir(FOLDER, $dir) or die $!;
        @subfiles = readdir(FOLDER);
        closedir(FOLDER);
    
        foreach $file (@subfiles) {
            next if $file =~ /^\.{1,2}$/;
            my $specfile = $dir . $global_delimiter . $file;
    
            if (-f $specfile) {
                push @ARGV, $specfile;
            }    
            if (-d $specfile) {
                &find($specfile);   
            }
        }
    }
}

$_ = expand($_);
__END__



Bart Lateur wrote:
> A second approach would be to have just one script, fill @ARGV in a
> BEGIN block. Yeah, that looks like it would be the best approach.
> 
>         #!/usr/bin/perl -pi
>         BEGIN {
>              use File::Find;
>              use Cwd;
>              my @argv = @ARGV; @ARGV = ();
>              find sub {
>                  push @ARGV, $File::Find::name if -f and /\.txt$/;
>              }, @argv ? @argv : cwd;
>         }
> 
>         s/(.*?)\t/$1.(' ' x (4-length($1)%4))/ge;
> 
> UNTESTED!
> 
> The idea is that you pass the path of the root directory(/-ies) on the
> command line, or it will pick the current working directory without
> arguments. It will fill @ARGV with a complete list of all found files.
> BTW any plain files in the command arguments get included too, if they
> match the pattern. That's a feature of File::Find.
> 
> It does that in a BEGIN block, so this is run once, at the start of your
> script. The main body of the script is run using the -pi command line
> switches, so that part runs once for every line in the input files.
> 
>    HTH,
>    Bart.

Reply via email to