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

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

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

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

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 .

  • Создание зашифрованного раздела на существующем диске с одним основным разделом при сохранении данных
  • Преобразование скриптов sysvinit / upstart init в runit
  • Установить идентификатор родительского процесса из ShellScript, позже удалить все дочерние процессы
  • Схема разделения для хоста виртуальной машины
  • vnstat не обновляет
  • Как загружать ядро ​​EFI с помощью QEMU (kvm)?
  • Как указать путь python для pip?
  • Ubuntu 14.04.2 LTS: для пользователей NIS SSH работает, но консольный вход и sudo fail
  • java-плагин не работает в Chrome-браузере (все возможные попытки исчерпаны)
  • Port Mirroring с использованием iptables - копирование всего трафика между nginx на: 80 и Apache по: 8080
  • Не удалось синхронизировать часы с двойной системой загрузки
  • Linux и Unix - лучшая ОС в мире.