wow, very tasty modifications to renlower to get it to handle more patterns that...
authorChris Koeritz <fred@gruntose.com>
Sat, 11 Apr 2015 00:57:50 +0000 (20:57 -0400)
committerChris Koeritz <fred@gruntose.com>
Sat, 11 Apr 2015 00:57:50 +0000 (20:57 -0400)
scripts/files/filename_helper.pl
scripts/files/renlower.pl
scripts/files/replace_spaces_with_underscores.sh

index 318e5829dbf6ec629416b3b9737abf4018c07e04..a6632cf512869722e77d81659434f27554a0f4d2 100644 (file)
@@ -66,20 +66,26 @@ sub glob_list {
     local(@files_found) = readdir(WHERE);
     closedir WHERE;
     foreach $possible_name (@files_found) {
-      # zoom through the list and see if we need to add it to the ones
-      # matching the passed in patterns.
-#      if ( ($possible_name eq ".") || ($possible_name eq "..") ) { 
-#        # skip the directory entries.
-#        print "skipping dir entries\n";
-#        next;
-#      }
-      # we need to process this a bit; directory patterns are different.
+      # we need to process the pattern a bit; directory patterns are different
+      # from perl regular expression patterns, so we end up massaging any "ls"
+      # wildcards into an equivalent perl-style one below.
       local($match) = $chopped_filename[1];
+#hmmm: would be nice to combine the replacements into a long batch instead of separate commands, but i do not seem to know how to do that yet in perl.
       $match =~ s/\./\\./g;  # replace periods with escaped ones.
       $match =~ s/\*/.*/g;  # replace asterisks with dot star.
       $match =~ s/\+/\\+/g;  # escape plusses.
+      $match =~ s/\?/\\?/g;  # escape question marks.
+      $match =~ s/\|/\\?/g;  # escape pipe char.
+      $match =~ s/\$/\\\$/g;  # escape dollar sign.
+      $match =~ s/\[/\\[/g;  # escape open bracket.
+      $match =~ s/\]/\\]/g;  # escape close bracket.
+      $match =~ s/\(/\\(/g;  # escape open quote.
+      $match =~ s/\)/\\)/g;  # escape close quote.
+      $match =~ s/\{/\\{/g;  # escape open curly bracket.
+      $match =~ s/\}/\\}/g;  # escape close curly bracket.
+
       $match = "^" . $match . "\$";  # make sure the whole thing matches.
-#print "possibname is $possible_name\n";
+#print "possibname is '$possible_name':\n";
       if ($possible_name =~ /$match/) {
         # this one matches so add it.
         push @to_return, $chopped_filename[0] . $possible_name;
index 7f9f3409f4a1ad4e4c33069be3a2b3aea12eed5b..d4e3f11fa9d2ec4d9bdef70ce7a92a05eba830ab 100644 (file)
@@ -33,6 +33,7 @@ exit 0;
 sub rename_lower {
   # go through the list of files passed in.
   foreach $current (&glob_list(@_)) {
+#print "unfiltered: '$current'\n";
     if ($current =~ /[A-Z]/) {
 #print "current is '$current'\n";
       local $old_name = $current;
@@ -43,8 +44,10 @@ sub rename_lower {
       local $new_name = $dir . $lc_name; 
 #print "new name='$new_name'\n";
       local $intermediate_name = $dir . "RL" .  rand() . ".tmp";
+#print "\n";
 #print "command A is: rename [$old_name] [$intermediate_name]\n";
 #print "command B is: rename [$intermediate_name] [$new_name]\n";
+#print "\n";
       rename($old_name, $intermediate_name)
           || die "failed to do initial rename";
       rename($intermediate_name, $new_name)
index 375b827457ef208e338fe3e7e5773a13334aaa4c..3f26f6a0920a4072e119f93d74d40e9b612e6540 100644 (file)
@@ -12,7 +12,7 @@ fi
 
 while [ $# -gt 0 ]; do
   file="$1"; shift
-  newname="$(echo "$file" | tr -s ' ' '_' | tr -d "}{)(][\\\~',:?><\"" | sed -e 's/\([0-9]\)_\./\1./g' | sed -e 's/_-_/-/' )"
+  newname="$(echo "$file" | tr -s ' ' '_' | tr -d "\$@#%}{)(][\\\~',:?><\"" | sed -e 's/\([0-9]\)_\./\1./g' | sed -e 's/_-_/-/' )"
   if [ "$file" != "$newname" ]; then
     # we've effected a name change, so let's actually do it.
     echo "'$file' => '$newname'"