Пакетное переименование на основе захвата регулярных выражений

287
Geert

Простите, что у меня нет исследований, но я просто не знаком со всеми инструментами.

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

some_name_n1_51000 some_name_n2_51000 some_name_n3_51000 ... 

это на самом деле должно быть названо

some_name_n51000_1 some_name_n51000_2 some_name_n51000_3 ... 

то есть 51000 и серийный номер должны поменяться местами.

Следующее работает в Debian, используя renameскрипт perl (который называется prename):

prename -nv 's/some_name_n(\d)_51000/some_name_n51000_$1' * 

Обратите внимание, что -vдает подробный вывод и -nозначает, что он делает пробный прогон. Финал *- это селектор файлов.

Причины, по которым сначала это не сработало:

  • Я использовал renameвместо сценария Perl prename.
  • Я забыл захватить регулярки группы между скобками, который затем хранятся в переменном $1( $2, $3для второй и третьей группы, и так далее).

Что можно улучшить:

  • На Debian Strech это дает мне предупреждение об устаревании

    Используемая устаревшая программа: переименование, поставляемое с пакетом perl Debian, будет удалено после выпуска stretch. Пожалуйста, установите отдельный пакет «переименовать», который будет предоставлять ту же команду.

renameПакет, однако, принимает несколько различных команд.

0
Обратите внимание, что https://superuser.com не является бесплатным сервисом для написания скриптов / кодов. Если вы сообщите нам, что вы уже пробовали (включая скрипты / код, который вы уже используете) и где вы застряли, мы можем попытаться помочь с конкретными проблемами. Вам также следует прочитать [Как мне задать хороший вопрос?] (Https://superuser.com/help/how-to-ask). DavidPostill 6 лет назад 0
Я боролся с `rename`, пытаясь заставить его переименовываться на основе захвата регулярных выражений, но я не могу понять, как это сделать. Вопрос очень ясный, нет никаких оснований для недопонимания. Исходя из опыта, люди решают эту проблему, используя bash, awk, zmv или что-то еще, поэтому предоставление того, что я уже пробовал, показалось мне бесполезным. Кто-то, знакомый с инструментами, вероятно, решит это за 5 секунд, сэкономив мне кучу времени и предоставив шаблон для будущего использования. Множество людей любят тратить эти 5 секунд, как это делают коллеги все время, но я думаю, для вас это касается меня. Geert 6 лет назад 0
«Я думаю, что для вас это касается меня». Нет, это не так. Речь идет о сообществе, решившем стандарты качества вопросов. Если бы мы все ответили на все вопросы о сценариях, не взирая на усилия, приложенные автором запроса, сайт был бы переполнен вопросами gimethescriptz. Не стесняйтесь оспаривать закрытие на https://meta.superuser.com/ DavidPostill 6 лет назад 0
Кроме того, вы даже не указываете свою операционную систему или язык сценариев. Вопрос явно не соответствует нашим стандартам качества. DavidPostill 6 лет назад 0
Вы правы, я перегорел. Geert 6 лет назад 0
Я ответил на это, вы можете открыть его, если хотите. Geert 6 лет назад 0
Хорошо. Но, пожалуйста, не редактируйте ответ на свой вопрос. [su] это сайт вопросов и ответов, и ответы должны быть отделены от вопросов. Вместо этого вы можете [ответить на свой вопрос] (https://superuser.com/help/self-answer). DavidPostill 6 лет назад 0

0 ответов на вопрос

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