Я бы порекомендовал команду rename
, она же Переименование Perl .Тогда вы можете сделать:
rename --dry-run 's|^(\d+)[. ]+(.*)|P$1 $2|; s| |-|g' *cpp
Пример вывода
'1. Two Sum.cpp' would be renamed to 'P1-Two-Sum.cpp'
'21. Merge Two Sorted Lists.cpp' would be renamed to 'P21-Merge-Two-Sorted-Lists.cpp'
'4. Median of Two Sorted Arrays.cpp' would be renamed to 'P4-Median-of-Two-Sorted-Arrays.cpp'
Если это выглядит правильно, сделайте резервную копию, удалите --dry-run
и запустите его снова.
Команда говорит ... "Переименуйте все файлы, заканчивающиеся на .cpp
, следующим образом. Захватите любое количество цифр (\d+
) в начале строки (^
) как захватгруппа 1. Разрешить и игнорировать любое количество пробелов или точек ([. ]+
). Захватить оставшуюся часть строки в качестве группы захвата 2. Заменить имя файла на P
, затем группу захвата 1, затем пробел, затем захватгруппа 2. Наконец, глобально замените все экземпляры пробела тире. ".
Если вы не привыкли к Perl, там есть два оператора подстановки, поэтому с 20 000 футов написано:
substitute|something|something else| ; substitute|something|something else|