Как-то так должно начаться:
#!/bin/bash
for f in "$@"; do
if [[ $f == *'.'* ]]; then continue; fi # Naive check to make sure we don't add duplicate extensions
ext=''
case $(file -b "$f") in
*ASCII*) ext='.txt' ;;
*JPEG*) ext='.jpg' ;;
*PDF*) ext='.pdf' ;;
# etc...
*) continue ;;
esac
mv "${f}" "${f}${ext}"
done
Вам нужно будет проверить вывод file
для каждого потенциального типа файла, чтобы найти соответствующую метку case
.