[download]

local/bin/imrename

   1 #!/bin/bash
   2 
   3 rename(){ # {{{
   4     declare -A name dups
   5 
   6     while read new old; do
   7         dir=$(dirname "$old")/
   8         new=${dir#./}$new
   9         name[$old]=${new}_$(( ++dups[$new] ))
  10     done
  11 
  12     printf '\n' >&2
  13 
  14     for i in "${!name[@]}"; do
  15         mv -vn "$i" "${name[$i]%_1}.${i##*.}"
  16     done
  17 } # }}}
  18 
  19 n=$#
  20 
  21 ################################################################################
  22 
  23 [[ $1 == -e || $1 == --exif ]] && shift && exiv2 -vFtr '%F %T'       "$@"
  24 [[ $1 == -3 || $1 == --id3  ]] && shift && id3   -vMf  '%a - %t.mp3' "$@"
  25 
  26 ################################################################################
  27 
  28 [[ $1 == -5 || $1 == --md5 ]] && shift &&
  29 rename < <(
  30     md5sum "$@" 2>&- | while read sum file; do
  31         printf ' %s\r' "${file/~/\~}" >&2
  32         echo "${sum:0:6} $file"
  33     done
  34 )
  35 
  36 ################################################################################
  37 
  38 [[ $1 == -w || $1 == --wall ]] && shift &&
  39 rename < <(
  40     for file in "$@"; do
  41         [[ -f $file ]] || continue
  42 
  43         r=$(identify -format '%wx%h' "$file[0]" 2>&-)
  44         c=$(convert "$file[0]" -scale 5% -colors 1 -unique-colors txt: |
  45         awk -F '[# ]+' 'NR > 1 { print substr($3, 0, 6) }' | paste -sd -)
  46 
  47         printf ' %s\r' "${file/~/\~}" >&2
  48         echo "$c-$r $file"
  49     done
  50 )
  51 
  52 ################################################################################
  53 
  54 [[ $n == $# ]] && echo '
  55     -e, --exif
  56     -3, --id3
  57     -h, --hash
  58     -w, --wall
  59 ' | sed '/^$/d' && exit 1