переименование нескольких файлов путем удаления случайных чисел

Я использую Ubuntu, и у меня много файлов. Файлы имеют два типа.

"img_00000_c0_1283347740957299us.jpg" "img_00000_c1_1283347740342342us.jpg" 

Они различаются c0 или c1. Числа в позиции «00000» увеличиваются по мере увеличения номера файла. Например, тип c0 и 5-й файл будет иметь имя «img_ 00005 _c0_1283347740957299us.jpg». Проблема в том, что длинные числа после 'c0_' или 'c1_' для меня бессмысленны и являются случайными числами. Они не всегда «1283347740957299us». Поэтому я хочу переименовать эти файлы, просто исключив эти последние числа.

 img_00005_c1_1283347740957299us.jpg ---> img_00005_c1.jpg 

Я попробовал несколько ответов в Интернете. Например, ответ вроде

 for FILE in eventDataLog.txt.2015*; do mv "$FILE" "abc-$FILE"; done 

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

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

  • Сервер Ubuntu 11.10: создание пользователя, домашний каталог, привилегии sudo: только командная строка
  • Создание образа Debian с панели запуска Ubuntu
  • nmcli ничего не показывает
  • Подключение к локальной сети WPA2 на Ubuntu с помощью Fluxbox
  • Рекомендуемое приложение для разработки «Системных диаграмм» из Makefile в Ubuntu?
  • Realtek RTL8111 Сетевая карта не работает на Ubuntu 14.04
  • Ошибка при установке общей папки для гостевой системы KVM Solaris
  • Периодически получать использование ЦП для одного процесса
  • 2 Solutions collect form web for “переименование нескольких файлов путем удаления случайных чисел”

    Пара опций, одновременно удаляющих кратчайший суффикс с конца имени:

    1. с командой prename основе prename

       $ prename -nv -- 's/_[^_]*\.jpg/.jpg/' *.jpg img_00000_c0_1283347740957299us.jpg renamed as img_00000_c0.jpg img_00000_c1_1283347740342342us.jpg renamed as img_00000_c1.jpg 

    (удалите опцию n когда вы довольны результатом)

    1. с использованием расширения параметра оболочки

       $ for f in img_*.jpg; do echo mv -- "$f" "${f%_*}.jpg"; done mv -- img_00000_c0_1283347740957299us.jpg img_00000_c0.jpg mv -- img_00000_c1_1283347740342342us.jpg img_00000_c1.jpg 

    (удалите echo когда вы довольны выходом).

    Если вы хотите более точно сопоставить шаблон (т. Е. Как последовательность из одной или нескольких десятичных цифр, за которой следует us ), вы можете сделать это, но это не кажется необходимым на основе предоставленной вами информации.

    Кажется, есть 16 цифр перед строкой us . Вы можете использовать rename чтобы удалить все 18 символов, как показано ниже.

     rename -v 's/_(\d){16}us//' *.jpg img_00000_c0_1283347740957299us.jpg renamed as img_00000_c0.jpg img_00000_c1_1283347740342342us.jpg renamed as img_00000_c1.jpg img_00005_c1_1283347740957299us.jpg renamed as img_00005_c1.jpg 

    Параметр -v (verbose) показывает имена файлов, которые переименованы. Шаблон (\d){16} указывает на группу из 16 цифр. Вышеприведенный результат основан на трех входных файлах образца. Вы также можете посмотреть другие примеры rename .

    Linux и Unix - лучшая ОС в мире.