improved spacem method to handle unwritable names better (where perl was not happy...
authorChris Koeritz <fred@gruntose.com>
Thu, 17 Sep 2015 17:05:02 +0000 (13:05 -0400)
committerChris Koeritz <fred@gruntose.com>
Thu, 17 Sep 2015 17:05:02 +0000 (13:05 -0400)
scripts/core/functions.sh
scripts/files/replace_spaces_with_underscores.sh

index 553e100f802d59dd89b4dcdc7642123a7a69307d..912f545a3b6ff1bb481b0ffa88788481db723b01 100644 (file)
@@ -470,21 +470,28 @@ if [ -z "$skip_all" ]; then
         echo "failure to find a file or directory named '$arg'."
         continue
       fi
+
+      # first we will capture the output of the character replacement operation for reporting.
+      # this is done first since some filenames can't be properly renamed in perl (e.g. if they
+      # have pipe characters apparently).
+      intermediate_name="$(bash "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg")"
+      if [ -z "$intermediate_name" ]; then
+        # make sure we report something, if there are no further name changes.
+        intermediate_name="'$arg'"
+      else 
+        # now zap the first part of the name off (since original name isn't needed).
+        intermediate_name="$(echo $intermediate_name | sed -e 's/.*=> //')"
+      fi
+
       # first we rename the file to be lower case.
-      perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$arg" &>/dev/null
-      # oops, now the name is all lower-case.  we need to make the
-      # same adjustment.
-      arg2="$(echo "$arg" | tr A-Z a-z)"
-      # we definitely wanted to adjust the case first, rather than doing all
-      # the wacky stuff this script does to the filename...  we will capture
-      # the output of the replace operaton for reporting.
-      final_name="$(bash "$FEISTY_MEOW_SCRIPTS/files/replace_spaces_with_underscores.sh" "$arg2")"
+      actual_file="$(echo $intermediate_name | sed -e "s/'\([^']*\)'/\1/")"
+      final_name="$(perl $FEISTY_MEOW_SCRIPTS/files/renlower.pl "$actual_file")"
       if [ -z "$final_name" ]; then
-        # make sure we report something, if there are no further name changes.
-        final_name="'$arg2'"
+        final_name="'$intermediate_name'"
+      else
+        final_name="$(echo $final_name | sed -e 's/.*=> //')"
       fi
-      # now zap the intermediate part of the name off.
-      final_name="$(echo $final_name | sed -e 's/.*=> //')"
+
       # printout the combined operation results.
       echo "'$arg' => $final_name"
     done
index a26371d4a934a8fa3974befadd5d0ccb0e780d5f..3cbcfa89a84326537abe3430930e217fb848a4cf 100644 (file)
@@ -16,7 +16,7 @@ while [ $# -gt 0 ]; do
   # in names.  then translate multiple underscores into just one.  then turn
   # number followed by underscore into just number (?).  then translate
   # underscore dash underscore into just dash.
-  newname="$(echo "$file" | tr -s ' ' '_' | tr -d "\$\!@&#%}{)(][\\\~',:?><\"" | sed -e 's/__/_/g' | sed -e 's/\([0-9]\)_\./\1./g' | sed -e 's/_-_/-/' )"
+  newname="$(echo "$file" | tr -s ' ' '_' | tr -d "\$\!|@&#%}{)(][\\\~',:?><\"" | sed -e 's/__/_/g' | 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'"