X-Git-Url: https://zdv2.bktei.com/gitweb/BK-2020-03.git/blobdiff_plain/ab468b4d87e3850311da305c4ed50ccdd770d287..f48d0d553a0cad85352274674db42aaf4b58970f:/user/zeropad.sh diff --git a/user/zeropad.sh b/user/zeropad.sh index 9039602..ad281b1 100755 --- a/user/zeropad.sh +++ b/user/zeropad.sh @@ -1,23 +1,53 @@ #!/bin/bash # Desc: Zero-pad working dir files with initial digits for sorting -# Usage: zeropad.sh -# Version: 0.0.1 +# Usage: zeropad.sh [str fext] +# Example: zeropad.sh; +# zeropad.sh ".jpg"; +# Version: 0.1.0 -# 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; +declare fext; # file extension -# 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; +list_files() { + # Desc: Lists working directory file basenames + # Usage: list_files + # Input: fext var file extension + # Output: stdout a line-delimited list of file names + if [[ -z "$fext" ]]; then + find . -mindepth 1 -maxdepth 1 -type f -exec basename '{}' \; ; + else + find . -mindepth 1 -maxdepth 1 -type f -exec basename '{}' \; \ + | grep -E -- "${fext}$" ; + fi; +}; # list pwd file basenames +main () { + # Read file extension if provided + if [[ -n "$1" ]]; then + fext="$1"; + fi; + # 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 + 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+