Хотите написать оболочку для переименования нескольких файлов - PullRequest
0 голосов
/ 22 февраля 2019

Вот как выглядят мои имена файлов:

1. Two Sum.cpp
2. xxx xxx.cpp

Я хочу изменить имена файлов следующим образом:

P1-Two-Sum.cpp
P2-xxx-xxx.cpp

удалить точку "." за номером

заменить "" на "-",

, затем добавить префикс "P";

, но я не знаком с оболочкой ...

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

Использование bash подстановка параметров :

for f in *.cpp ; do d="${f/.}" ; mv "$f" "P${d// /-}" ; done
0 голосов
/ 22 февраля 2019

Я бы порекомендовал команду 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|
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...