> I'm wondering if there's an easy (ie. non-manual) way of removing files > containing special chars. I've had the bug with the DOS pfiles, causing > a lot of files to be created with special chars in the filename: > ugly way, but I can't think of anything else right off hand. Code to follow... anyone feel free to one-up me with something simple. keep in mind this is mailer code, but even without knowledge of perl, i think you could fix any errors.. just make sure to set your bad_directory variable. PjD #!/usr/bin/perl if(@ARGV != 1 || !(-d $ARGV[0])) { print "Need a directory argument chum.\n"; exit; } &fix_dir($ARGV[0]); sub fix_dir { my $curdir = shift; my $bad_directory = "ASSIGN A BAD DIRECTORY HERE!!!!"; if($bad_directory eq "ASSIGN A BAD DIRECTORY HERE!!!!") { print "Yo! Edit this script, search for 'bad_directory' and set\n"; print " the dir you want your bad files to go to!\n"; exit; } if(-e $bad_directory && !(-d $bad_directory)) { print "'$bad_directory' is not a directory!\n"; exit; } if(!(-e $bad_directory)) { if(!mkdir($bad_directory)) { print "Failed to create dir '$bad_directory', exiting.\n"; exit; } print "Created dir '$bad_directory'\n"; } opendir(DIR,"$curdir"); # works to get rid of the . and .. dirs, regardless of the dir you're # in.. works in windows too. sorry if it looks confusing but this IS # the easiest way I could think of. my @list = grep !/[\\\/]?\.\.?$/, map "$curdir/$_", readdir DIR; foreach $file (@list) { if(-d $file) { #&fix_dir($curdir); } elsif (-f $file) { my $fn = $file; # put in the chars you want.. it removes them.. # therefore, if you don't want things like spaces, etc.. # you can replace this with something like.. # $fn =~ s/[A-Za-z0-9\.\\\/_-]*//g; and get most 'legal' # filenames. remember, you're geting a pseudo absolute filename # relative to the argument you provided ($ARGV) so, you may # have to include \'s or /'s (like above example) or even :'s # the trick is to remove all chars you like. if the string is # zero lenght after that, you're set, else it's bad. # this one looks for all printable characters $fn =~ s/[\x20-\x7E]*//g; if(length($fn) != 0) { printf("'$file' has bad chars\n); `move $file $bad_directory`; } } } } -- +---------------------------------------------------------------+ | FAQ: http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html | | Archives: http://post.queensu.ca/listserv/wwwarch/circle.html | +---------------------------------------------------------------+
This archive was generated by hypermail 2b30 : 12/06/01 PST