--- /dev/null
+#!/usr/bin/env bash
+set -euo pipefail
+mv_command=mv
+skip_duplicates=true
+while getopts l opt;do
+ case $opt in
+ l) mv_command=ln;;
+ esac
+done
+shift "$((OPTIND - 1))"
+
+for f; do
+ if [[ ! -e "$f" ]];then
+ echo "Input file \"$f\" does not exist." >&2
+ continue
+ fi
+ extension=${f##*.}
+ new_name="$(find "$f" -printf "%TY-%Tm-%Td %TT %TZ").$extension"
+ while [[ -e "$new_name" ]];do
+ if $skip_duplicates;then
+ if [[ "$(find "$f" -printf '%i')" == "$(find "$new_name" -printf '%i')" ]];then
+ echo "Skipping $f: it is already $new_name (same inode)"
+ fi
+ if cmp "$f" "$new_name";then
+ echo "Skipping $f: it is already $new_name"
+ continue 2
+ fi
+ fi
+ fields=( $new_name )
+ t=${fields[1]#*.}
+ if (( ${#t} != 10 ));then
+ echo "Expected $t (from $new_name) to be 10 characters" >&2
+ exit 1
+ fi
+ t=$(printf "%010d" $(( $(sed 's/^0*//' <<< "$t") + 1 )) )
+ new_name="${fields[0]} ${fields[1]%.*}.$t ${fields[2]}"
+ done
+ $mv_command -vi "$f" "$new_name"
+done
+