#!/bin/sh -u # # Examine the named files and attach correct extensions to misnamed ones. # - Cameron Simpson 22feb1999 # # Base entirely on file2mime and mimeext now. - cameron 24jul2003 # Added "-i type" option to bypass file2mime. - cameron 19apr2005 # cmd=$0 usage="Usage: $cmd [-i type] [filenames...] -i type Specify the MIME type instead of guessing from content." itype= [ $# -gt 0 ] && [ "x$1" = x-i ] && { itype=$2; shift; shift; } [ $# = 0 ] && { [ -t 0 ] && echo "$cmd: reading filenames from stdin..." >&2; set -- `cat` || exit 1; } xit=0 for f do [ -f "$f" ] || { echo "$cmd: $f: not a regular file" >&2 xit=1; continue; } [ -s "$f" ] || { echo "$cmd: $f: empty file!" >&2 xit=1; continue; } if [ -n "$itype" ] then type=$itype else type=`file2mime "$f"` || { echo "$cmd: can't deduce MIME type of \"$f\"" >&2 xit=1 continue } fi prefext=`mimeext "$type"` || { echo "$cmd: no preferred extension for $type" >&2 xit=1 continue } # see if ext is ok already fbase=`basename "$f"` case "$fbase" in *".$prefext") [ -t 1 ] || echo "$f"; continue ;; esac fdir=`dirname "$f"` case "$fdir" in .) fdir= ;; *) fdir=$fdir/ ;; esac case $f in *.*) newf=$fdir`expr "x$fbase" : 'x\(.*\)\..*'`.$prefext ;; *) newf=$fdir$fbase.$prefext ;; esac [ -t 1 ] && echo "$f -> $newf" mv -i -- "$f" "$newf" || xit=1 [ -t 1 ] || echo "$newf" done exit $xit