У меня есть каталог, содержащий тысячи файлов с именами
t_00xx_000xxx.png
Я хочу изменить их имена на 00xx_000xxx_t.png
поэтому возьмите префикс и поместите его как постфикс, может это быть сделанным только в одной команде
mmv
(доступно из репозитория universe
) отлично подходит для такого рода вещей, где простые глобусы оболочки, а не регулярные выражения могут выполнять свою работу
Пример.
mmv -n -- '*_*_*.png' '#2_#3_#1.png'
t_00xx_000xxx.png -> 00xx_000xxx_t.png
Удалите -n
, как только вы почувствуете, что он работает правильно.
Если префикс разделяется подчеркиванием (_
), можно сделать следующее:
rename -n 's/^([^_]*)_(.*)\.(.*)$/$2_$1.$3/' file(s)
Это будет работать с любым префиксом и любым расширением.
Удалите -n
выполнить переименовывание, если Вы довольны результатом.
Объяснение:
s/search_pattern/replace_pattern/
Шаблон поиска:
^
- Соответствуйте началу имени файла([^_]*)
- Соответствуйте любому символу, который не является подчеркиванием [^_]*
и получите его как $1
(...)
_
- Соответствуйте первому подчеркиванию(.*)\.(.*)
- Соответствуйте чему-либо .*
прежде и после последнего .
и получите его как $2
и $3
. .
должен быть оставлен, потому что это - специальный символ в Regex-> \.
$
- Соответствуйте концу строкиШаблон замены:
$2_$1.$3
- "Filename_Prefix. Расширение" от получений шаблона поиска.Это возможно с rename
команда:
Сначала проверьте то, что было бы сделано (suppliying -n
). Если это выглядит хорошим, отбрасывание -n
и выполненный снова:
rename -n 's/t_(.+)\.png$/$1_t.png/' *.png # check only
rename 's/t_(.+)\.png$/$1_t.png/' *.png # actually rename the files