Повторно использовать совпадение в паттерне shell

Не совсем понимаю механизм работы стандартного pattern matching в shell, поэтому не уверен можно ли так.

Дана директория, заполненная файлами *.mp4 и одной субдиректорией subdir. Я могу с помощью pattern matching переместить все эти файлы в субдиректорию с помощью следующей команды:

mv ./*.mp4 ./subdir/

Но если мне нужно, например, им всем поменять расширение? Я бы сделал что-нибудь подобное:

mv ./*.mp4 "./@.webm"

Где @ должно стать тем, что "нашлось" под *.

Естественно, этот синтаксис я выдумал, и такая команда не сработает.

Вопрос: можно ли использовать совпадение под регулярным выражением второй или более раз в одной команде? Если нельзя, то как можно решить подобную задачу? Сразу могу сказать, что знаю решение с помощью цикла for f in ./*.mp4 ; do mv "$f" "${f/.mp4/.webm}" ; done, но хотелось бы иметь варианты по компактнее.

И еще доп. вопрос: правильно ли я понимаю, что с помощью pattern matching-а (как в первом примере), строка, его содержащая, просто вызывается повторно для каждого совпадения? Например, генерируется множество вызовов: mv ./1.mp4 ./subdir/, mv ./2.mp4 ./subdir/, ... Или как это работает?


Ответы (0 шт):