Существуют инструменты, которые могут применять поиск и замену регулярных выражений ко всему имени файла, например, perl-rename
(также обычно называемый prename
). В таких инструментах вы должны сопоставлять несколько цифр с \d+
или [0-9]+
внутри "группы захвата" (круглые скобки) и ссылаться на нее позже с $1
или \1
зависимости от программы.
Например:
prename -v 's/file(\d+)$/file$1_xyz/' file[123]
prename -v 's/(file\d+)$/$1_xyz/' file[123]
(Опция -v
заставляет предварительное имя распечатывать изменения. Вы можете использовать -n
чтобы напечатать изменения без фактического переименования.)
Вы также можете добиться этого, используя только mv
и sed
:
for old in file[123]; do
new=$(sed -r 's/file([0-9]+)$/file\1_xyz/' <<< "$old")
mv -v "$old" "$new"
done
Но если вы посмотрите внимательно, вам на самом деле не нужен номер. Все, что вы делаете, так или иначе добавляете некоторый статический текст, например так:
prename 's/$/_xyz/' file[123]
for f in file[123]; do
mv "$f" "${f}_xyz"
done