Повторно использовать совпадение в паттерне 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/, ... Или как это работает?