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

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

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

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

0
13.04.2017, 15:36
2 ответа

Кажется, есть 16 цифр непосредственно перед строкой us . Вы можете использовать переименовать , чтобы удалить в общей сложности 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 (подробный) показывает имена файлов, которые были переименованы. Шаблон (\ d) {16} указывает группу из 16 цифр. Показанный выше результат основан на трех примерах входных файлов. Вы также можете посмотреть другие примеры на переименовать .

0
28.01.2020, 02:34

Пара вариантов, оба просто удаляют самый короткий _ суффикс из конца имени:

  1. с помощью основанной на perl команды prename

    $ prename -nv -- 's/_[^_]*\.jpg/.jpg/' *.jpg
    img_00000_c0_1283347740957299us.jpg переименован в img_00000_c0.jpg
    img_00000_c1_1283347740342342us.jpg переименован в 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), вы можете это сделать, но это не кажется необходимым, исходя из предоставленной вами информации.

2
28.01.2020, 02:34

Теги

Похожие вопросы