Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

Re: Transforming File Name Characters

by choroba (Canon)
on Mar 11, 2013 at 17:15 UTC ( #1022836=note: print w/ replies, xml ) Need Help??


in reply to Transforming File Name Characters

Yes, renaming a directory should be the same as renaming a file.

What do you mean by "special characters"?

لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ


Comment on Re: Transforming File Name Characters
Replies are listed 'Best First'.
Re^2: Transforming File Name Characters
by rfleisch (Initiate) on Mar 11, 2013 at 18:30 UTC

    We need to remove all / \ } { & $ # @ ~ ` pretty much anything that is NOT a letter or a number.

      You can try something along the following lines:
      fixdir('d'); sub fixdir { my $dir = shift; opendir my $DH, $dir or die "$dir: $!"; while (my $f = readdir $DH) { next if grep $_ eq $f, qw/. ../; (my $new = $f) =~ s/[^a-zA-Z0-9_.]/_/g; die "$f: $new already exists.\n" if -e "$dir/$new" and $new ne + $f; print STDERR "Renaming: $f -> $new\n"; rename "$dir/$f", "$dir/$new"; fixdir("$dir/$new") if -d "$dir/$new"; } }
      لսႽ ᥲᥒ⚪⟊Ⴙᘓᖇ Ꮅᘓᖇ⎱ Ⴙᥲ𝇋ƙᘓᖇ
        WOW - Thank YOU !!!! :-)
        I have a question regarding this statement... sub fixdir { my $dir = shift; opendir my $DH, $dir or die "Not Found....$dir: $!"; while (my $f = readdir $DH) { next if grep $_ eq $f, qw/. ../; (my $new = $f) =~ s/[^a-zA-Z0-9_.]/_/g; next if ($new eq $f); <<<<<<<<<<<<< THIS ONE <<<<<<<<<<<< +<<<< while ( -e "$dir/$new") { $new.= "1"; } print STDERR "Renaming: $f -> $new\n"; rename "$dir/$f", "$dir/$new"; fixdir("$dir/$new") if -d "$dir/$new"; } } IF $f is the name of a directory and not a file won't that whole direc +tory get skipped????? Thanks -Ray
        Hello, This is my revised code. can anyone spot any blaring error??
        #!/usr/local/ActivePerl-5.16/bin/perl use POSIX qw/strftime/; use strict; use warnings; use diagnostics; sub fixdir { my $dir = shift; opendir my $DH, $dir or die "Not Found....$dir: $!"; while (my $f = readdir $DH) { next if grep $_ eq $f, qw/. ../; (my $new = $f) =~ s/[^a-zA-Z0-9_.]/_/g; if (-e "$dir/$new") { fixdir("$dir/$new") if -d "$dir/$new"; next; } # next if ($new eq $f); while ( -e "$dir/$new") { $new.= "1"; } print STDERR "Renaming: $f -> $new\n"; rename "$dir/$f", "$dir/$new"; fixdir("$dir/$new") if -d "$dir/$new"; } } die "No command line arguments given!" unless @ARGV; my $nargs = @ARGV; print "Number of command line arguments is $nargs\n"; my $Do_Dir = $ARGV[0]; # print("ARG=", "$Do_Dir", "<<<<<<\n"); if (!$Do_Dir ) { print ("No Folder Name given!\n"); exit; } print( "The Folder Name is: ", "$Do_Dir", "\n" ); fixdir("$Do_Dir"); print "Done...\n"
        Thank you one and all for your help on this little project1

        Regards, -Ray

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (4)
As of 2015-07-28 05:11 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (252 votes), past polls