diff --git a/.local/bin/fixnames b/.local/bin/fixnames index d8401246..40b65a7f 100644 --- a/.local/bin/fixnames +++ b/.local/bin/fixnames @@ -13,22 +13,23 @@ find . -type d -path '*/.*' -prune -o -print0 | xargs -0 -n1 -P10 -I{} sh -c ' echo "$new_name" } process_item() { - item_path="$1"; [ "$item_path" = "." ] && return + item_path="$1"; + [ "$item_path" = "." ] && return dir_name=$(dirname "$item_path"); base_name=$(basename "$item_path") - if [ -d "$item_path" ]; then + [ -d "$item_path" ] && { new_name=$(echo "$base_name" | sed -E "s/[^a-zA-Z0-9 _.-]+//g; s/[ .-]+/_/g; s/_+/_/g; s/^_//; s/_$//; s/(.*)/\L\1/") [ -z "$new_name" ] && new_name="untitled" - else + } || { file_ext="${base_name##*.}" base_name_no_ext="${base_name%.*}" new_base_name_no_ext=$(echo "$base_name_no_ext" | sed -E "s/[^a-zA-Z0-9 _.-]+//g; s/[ .-]+/_/g; s/_+/_/g; s/^_//; s/_$//; s/(.*)/\L\1/") [ -z "$new_base_name_no_ext" ] && new_base_name_no_ext="untitled" - new_name="${new_base_name_no_ext}.${file_ext}" - fi - if [ "$base_name" != "$new_name" ]; then + [ -z "$file_ext" ] || [ "$file_ext" = "$base_name_no_ext" ] && new_name="$new_base_name_no_ext" || new_name="${new_base_name_no_ext}.${file_ext}" + } + [ "$base_name" != "$new_name" ] && { [ -e "${dir_name}/${new_name}" ] && new_name=$(generate_unique_name "${new_name%.*}" "${new_name##*.}" "$dir_name") mv "$item_path" "${dir_name}/${new_name}" 2>/dev/null || true - fi + } } process_item "{}" ' 2>/dev/null