#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
. Но как мне добиться этого с помощью того, что я пытаюсь сделать?