Переименование группы файлов с сохранением их номеров

Переименование группы файлов с сохранением их номеров

У меня есть куча таких файлов:

pic100.png
pig102.png
box103a.png
superb103b.png
px103c.png
rotor110 - new.png
ready1323 (yellow car).png
motorhome1036x red circle.png
...

Итак, вы можете заметить, что файлы могут состоять из 3 частей:

  • префикс, который может быть любой строкой
  • число, которое может содержать суффикс, например «a», «b» и т. д.
  • необязательное окончание, которое всегда является строкой и начинается с пробела, например «(желтая машина)», «красный круг» и т. д.

Мне нужно следующее: я хочу за одну операцию:

  • поменяй префикс на тот, который мне нужен
  • сохраните номер и суффикс (a, b, c...), если он есть
  • избавиться от окончания

Используя первый пример, я могу захотеть преобразовать его в

object100.png
object102.png
object103a.png
object103b.png
object103c.png
object110.png
object1323.png
object1036x.png

как мне это сделать? Как видите, единственное, что я сохраняю, это номер и суффикс "a, b, c", когда он есть...

Проще говоря, команда должна действовать во всех файлах в указанном каталоге.

Заранее спасибо.

решение1

Стандартный способ сделать что-то подобное — использовать sed для генерации нового имени файла:

ls | while read file; do
     new=$( echo $file | sed 's/[^0-9]*\([^ ]*\)[^.]*\(\..*\)*/object\1\2/' )
     mv "$file" "$new"
done

Прежде чем это сделать, вам следует проверить команды, чтобы убедиться, что они выполняют то, что вам нужно, и сделать резервную копию.

Связанный контент