Переименование нескольких файлов с шаблоном даты с помощью rename

#linux #shell #rename

#linux #оболочка #переименовать

Вопрос:

Я прочитал несколько сообщений, касающихся этой проблемы, но ни одно из предложенных решений, похоже, не работает для меня. Возможно, это просто связано с опечаткой или чем-то подобным глупым, но я просто не могу найти свою ошибку уже несколько часов.

У меня есть довольно много файлов, которые я хотел бы переименовать. Для них есть два очень похожих шаблона. Файлы называются либо так, либо так:

 xx-xx-xxxx-Protocoll_xx.xx.xxxx.md
 

или вот так:

 xx-xx-xxxx-Protocoll xx.xx.xxxx.md
 

Я бы хотел, чтобы они были названы так:

 Protocoll xx.xx.xxxx.md
 

Я пробовал следующие конфигурации:

 rename -v -n 's/....-..-..-Protocoll_(..........).md/Protocoll $1.md/' *.md
rename -v -n 's/....-..-..-//' *.md
rename -v -n 's/....-..-..-/' '' *.md
rename -v -n 's/....-..-..-Protocoll_(..........).md' 's/Protocoll $1.md/' *.md
rename -v -n '....-..-..-Protocoll_(..........).md' 'Protocoll $1.md' *.md
 

Я всегда получаю один и тот же код ошибки 4 .
Я использую следующую версию rename :
rename from util-linux 2.33.1

Ответ №1:

Переименование сохранит несогласованные символы в имени файла.

Таким образом, одним из решений может быть:

 rename -v -n 's/^.*(Proto)/$1/' *.md
 

Или лучше преобразовать " " и "_" " "

 rename -v -n 's/^.*(Protocoll)./$1 /' *.md
 

Комментарии:

1. Я провел быстрый тест, создал файл test.txt и выполнил команду rename -v -n 's/^.*(st)/21$1/' *.txt . Результат был rename: not enough arguments , так что, я думаю, мне это нужно в форме rename old-name new-name file вместо rename regex file . Но как мне добиться этого с помощью того, что я пытаюсь сделать?