Использовать (perl )переименовать. Команда выглядит следующим образом:
rename 's/( [0-9]*).*\.ext/$1.ext/' *
Н.Б. есть два rename
, которые обычно поставляются с дистрибутивами Linux.По умолчанию обычно используется более простая версия. Переименование на основе perl -намного мощнее, потому что оно дает вам доступ к регулярным выражениям. Убедитесь, что вы используете последний. (Вы не указали свой дистрибутив, но в Arch он предоставляется пакетом perl-rename
.)
Создайте файлы (Я добавил дополнительный файл в конце ).
$ touch 'filename1 1 extra1.ext' 'filename1 2.ext' 'filename1 3 extra2.ext' 'filename2 1.ext' 'filename2 100 extra3.ext' 'filename20 1.ext' 'filename20 15 extra100.ext' 'filename3 1 3 4.ext'
Проверка команды
$ rename 's/( [0-9]*).*\.ext/$1.ext/' * -n
filename1 1 extra1.ext -> filename1 1.ext
filename1 3 extra2.ext -> filename1 3.ext
filename20 15 extra100.ext -> filename20 15.ext
filename2 100 extra3.ext -> filename2 100.ext
filename3 1 3 4.ext -> filename3 1.ext
Если вы довольны результатами, снимите флаг «пробного -запуска»/теста -n
и запустите его по-настоящему.
rename 's/foo/bar/' *
:perl rename заменит вхождение регулярного выражения foo
на bar
. Это действует на все файлы *
в текущем каталоге. Вы также можете явно заменить это на *.ext
, чтобы ограничить файлы, с которыми он работает. /( [0-9]*).*\.ext
:Совпадение с пробелом, за которым следует ряд цифр [0-9]*
, за которым следует еще один пробел. Включите первый пробел и цифры в группу захвата ( [0-9]*)
, чтобы использовать их позже. Затем сопоставьте все .*
вплоть до расширения \.ext
. Поскольку это регулярное выражение «жадное», оно попытается сопоставить как можно больше символов. т. е. если в части extra
имени файла есть цифры, окруженные пробелами, оно будет им соответствовать. /$1.ext
Замените эту совпадающую часть группой захвата сверху $1
, т. е. пробелом и цифрами, за которыми следует расширение .ext
.