У меня есть куча таких файлов:
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
Прежде чем это сделать, вам следует проверить команды, чтобы убедиться, что они выполняют то, что вам нужно, и сделать резервную копию.