Este one-liner funciona para seus dados de exemplo:
for i in *; do echo "$i";mv "$i" $(echo "$i" | perl -ne '($num)=$_=~/(\d+).*\.mp4/; print "HxH",sprintf("%03d",$num),".mp4","\n"'); done;
Explicação:
for i in *;
do
echo "$i";
mv "$i" $(echo "$i" | perl -ne '($num)=$_=~/(\d+).*\.mp4/; print "HxH",sprintf("%03d",$num),".mp4","\n"');
done;
for i in *;do
- > percorra todos os arquivos no diretório atual
echo "$i";
- > escreva o arquivo atual (veja progres / logging)% mv "$i" $(echo "$i" | perl -ne '($num)=$_=~/(\d+).*\.mp4/; print "HxH",sprintf("%03d",$num),".mp4","\n"');
- > renomeando o comando (nome original para a saída do comando perl) O comando perl extrai os dígitos do nome do arquivo e imprime "HxH", o número com os 0s iniciais e ".mp4"
Nota importante:
O comando dado funciona nas duas entradas de amostra fornecidas. Você deve testá-lo definitivamente antes de aplicá-lo aos seus arquivos reais. Portanto, eu recomendaria remover mv "$i"
do comando. Então você pode validar os nomes.