feat(user/zeropad.sh):Only rename files that need renaming
[BK-2020-03.git] / user / zeropad.sh
index 903960266b88c66b148bdedf8f1e51e09ab8dba1..e008b7192fe19355ab1fbbae1b34bd40853708af 100755 (executable)
@@ -1,23 +1,39 @@
 #!/bin/bash
 # Desc: Zero-pad working dir files with initial digits for sorting
 # Usage: zeropad.sh
 #!/bin/bash
 # Desc: Zero-pad working dir files with initial digits for sorting
 # Usage: zeropad.sh
-# Version: 0.0.1
+# Version: 0.0.5
 
 
-# Find the maximum number of leading digits in the filenames of working dir
-max_digits=$(ls -1 * | sed 's/[^0-9].*//' | awk '{ if(length > L) L=length } END { print L }');
-declare -p max_digits;
+list_files() {
+    # Desc: Lists working directory file basenames
+    # Usage: list_files
+    # Input: none
+    # Output: stdout  a line-delimited list of file names
+    find . -mindepth 1 -maxdepth 1 -type f -exec basename '{}' \; ;
+}; # list pwd file basenames
+main () {
+    # Find the maximum number of leading digits in the filenames of working dir
+    max_digits="$(list_files | sed -e 's/[^0-9].*//' | awk '{ if(length > L) L=length } END { print L }')";
+    # declare -p max_digits; # debug
 
 
-# Loop over the files and rename them
-for file in *; do
-  # Extract the leading digits
-  digits=$(echo "$file" | sed 's/\([0-9]*\).*/\1/');
-  # Zero-pad the digits
-  padded_digits=$(printf "%0${max_digits}d" "$digits");
-  # Construct the new filename
-  new_file="${padded_digits}${file#${digits}}";
-  # Rename the file
-  mv -n "$file" "$new_file"
-  # declare -p file new_file; # debug
-done;
+    # Loop over the files and rename them
+    while read -r file; do
+        re='^[0-9]+';
+        if [[ ! "$file" =~ $re ]]; then continue; fi;
 
 
+        # Extract the leading digits
+        digits="$(echo "$file" | sed 's/\([0-9]*\).*/\1/')";
+        # Zero-pad the digits
+        padded_digits="$(printf "%0${max_digits}d" "$digits")";
+        # Construct the new filename
+        new_file="${padded_digits}${file#${digits}}";
+        # Rename the file
+        if [[ "$file" == "$new_file" ]]; then continue; fi;
+        mv -n "$file" "$new_file"
+        # declare -p file new_file; # debug
+    done < <(list_files);
+}; # main program
 
 
+main "$@";
+
+# Author: Steven Baltakatei Sandoval
+# License: GPLv3+