Поменять имена файлов наоборот

Следующий однострочный скрипт предназначен для переименования файлов, например. от Foo_Bar_Baz.txt до Baz_Bar_Foo.txt:

(rename — это утилита rename(1) из File::Rename.)

rename -n 's/(\w+)_(\w+)_(\w+)/join "_", reverse @{^CAPTURE}/xe' ./*.txt

Это работает, но в настоящее время количество групп, разделенных подчеркиванием, жестко запрограммировано. То есть скрипт отлично работает, например. Foo_Bar_Baz, но он неправильно обрабатывает Foo_Bar или Aaa_Bbb_Ccc_Ddd.

Как можно настроить его таким образом, чтобы он обрабатывал произвольное количество групп, разделенных подчеркиванием?

не знаю Perl, но почему бы не создать список, разделив его на _, а затем соединив зарезервированный список на _?

DuesserBaest 16.08.2024 11:45
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
1
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Используйте разделение:

rename -n 's{(.*)(?=\.txt$)}{ join "_", reverse split /_/, $1 }e' *.txt

Я не знаю Perl, поэтому использовал CodeConvert для перевода Python в Perl.

Идея состоит в том, чтобы разделить путь . на префикс и суффикс. Затем разделите префикс вдоль _ на список. Переверните список и соедините его с помощью _. Наконец объединить с суффиксом


use strict;
use warnings;

my $s1 = "Aaa_Bbb_Ccc_Ddd.txt";
my $s2 = "Baz_Bar_Foo.txt";

sub reverse_prefix {
    my ($path) = @_;
    my ($prefix, $suffix) = split(/\./, $path);

    my @pf_elements = split(/_/, $prefix);

    my $pf_elements_rev = join("_", reverse @pf_elements);

    return "$pf_elements_rev.$suffix";
}

print reverse_prefix($s1), " ", reverse_prefix($s2);


Смотрите на onecompiler

хотя этот код явно не содержит ошибок, codeconvert использует генеративный искусственный интеллект, и его использование для генерации ответов запрещено - stackoverflow.com/help/gen-ai-policy

jhnc 16.08.2024 18:51

Другие вопросы по теме