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

Я использую 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 

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

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

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

  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 .