Вы могли сделать (с GNU grep):
grep -hEo "[[:alnum:]_'-]+" ./*.txt | sort | uniq -c | sort -rn
Изменение [:alnum:]_'-
выше к тому, что должно быть составляющими слова.
Можно попробовать
for a in *.jpg ; do mv -- "$a" "${a:22:4}-${a:26:2}-${a:28:2} ${a:30:2}-${a:32:2}-${a:34:2}.jpg" ; done
Немного ужасный, но это должно сделать задание. Как всегда, удостоверьтесь, что протестировали на копии прежде.
Если первая часть имен файлов не всегда имеет ту же длину, можно использовать awk для извлечения строки после второго _
и используйте первые 8 цифр для построения имени файла:
#!/usr/bin/env bash
for file in folder/*; do
outName=$(awk -F"_" '{ print substr($3,1,4)"-"substr($3,5,2)"-"substr($3,7,2) }' <<< "${file}").jpg
mv "${file}" "${outName}"
done