Мне нужно переименовать следующее:
file_001_loremipsum.png
file_002_dolor.png
file_003_sit.png
file_004_amet.png
file_105_randomness.png
в
upl_loremipsum.png
upl_dolor.png
upl_sit.png
upl_amet.png
upl_randomness.png
Как мне сделать это с помощью одной простой строки команды терминала?
rename
regex
batch-rename
Унамата Санатарай
источник
источник
Ответы:
Решение приведенного выше примера с использованием переименования :
Использование:
От
man rename
:переименование МОЖЕТ принять в качестве аргументов регулярное выражение.
То, на что мы смотрим, это содержание между одинарными кавычками
'
. Вы можете поместить регулярное выражение через/
.Формула:
s/(1)/(2)/
где(1)
= шаблон поиска и(2)
= шаблон замены.Итак, ознакомьтесь с регулярным выражением и наслаждайтесь переименованием командных файлов на основе шаблонов!
источник
rename
его легко установитьbrew install rename
.--no-act
флаг установлен--nono
вместо этого. Этот ответ также может быть немного более явным:[files]
относится к исходным файлам сопоставления с образцом в текущем каталоге, которые можно потенциально переименовать (например,*
сопоставить все, но только в текущем каталоге).rename
, которая имеет форматrename from to file
и не поддерживает регулярные выражения. На самом деле, мой дистрибутив Linux (Cent OS 7) имеет именно эту версию.если файлы находятся в нескольких каталогах, используйте переименование после поиска, например:
-n после переименования, чтобы проверить, удалите его, чтобы продолжить! -)
вот так вы ассоциируете находку и переименовываете силу.
Лично я использовал это, чтобы переименовать источники заголовка .h в .hpp
источник
-iname
,-type
и-exec
флаги в manpages.ubuntu.com/manpages/bionic/man1/find.1.html#expression . (find --help
не особенно полезно для этой команды.) TL; DR:-iname
соответствует шаблону без учета регистра;-type f
соответствует «обычным файлам»; и-exec
выполняет выражение, пока не встретит;
символ (точка с запятой).Это может быть сделано с небольшим волшебством расширения параметра bash!
file_[0-9]*_*;
- Первый шаблон используется для прохождения всех файлов, которые начинаются с 'file_anynumber_'${f#file_[0-9]*_}
- Второй шаблонfile_[0-9]*_
используется в расширении параметра, которое сообщает bash об удалении 'file_anynumber_' из начала строки.Для получения дополнительной информации о
Parameter expansion
:источник
[0-9]*
будет соответствовать одна цифра, за которой следует любая строка. Вероятно, есть лучший способ сопоставить только цифры, но я не могу придумать ничего краткого.