Этот ответ не выполняет команду file
несколько раз для каждого файла, что не нужно
file -N --mime-type -F"-&-" * | awk -F"-&-" 'BEGIN{q="\047"}
{
o=$1
gsub("/","_",$2);sub("^ +","",$2)
if (!($2 in dir )) {
dir[$2]
cmd="mkdir -p "$2
print cmd
#system(cmd) #uncomment to use
}
files[o]=$2
}
END{
for(f in files){
cmd="cp "q f q" "q files[f]"/"f".jpg" q
print cmd
#system(cmd) #uncomment to use
}
}'
аналогично, это можно сделать с помощью скрипта bash4 + с использованием ассоциативных массивов.