#!/bin/bash if [ -z "$1" ]; then echo "Usage: ${0##*/} FILES..." exit 1 fi # mtime threshold in seconds for safety MTIME_DIFF_MAX=$(( 60 * 60 * 24 )) DATE_FORMAT="%Y%m%d_%H%M%S" while [[ -n $1 ]]; do fdir=`dirname "$1"` fname=`basename "$1"` # output from date +"%s" is assumed to be at least 10 digits mtime=`echo "$fname" | grep -o '\.[0-9]\{10\}' | cut -b2-` [[ -z $mtime ]] && { shift && continue } [[ `echo "$mtime" | wc -l` -gt 1 ]] && { echo "${0##*/}: ambigious name: '$1'" >&2 shift && continue } mtime_real=`stat -c '%Y' "$1"` mtime_diff=$(($mtime - $mtime_real)) # abs() [[ $mtime_diff -lt 0 ]] && mtime_diff=$(( -$mtime_diff )) [[ $mtime_diff -gt $MTIME_DIFF_MAX ]] && { echo "${0##*/}: real mtime differs too much: '$1'" >&2 shift && continue } mdate=`date +"$DATE_FORMAT" -d "@$mtime"` # sed may need some escaping here fname=`echo "$fname" | sed "s/$mtime/$mdate/"` mv "$1" "$fdir/$fname" shift done