Hmm. Você não pode 1 , nem universalmente.
*
é um curinga. O shell expande . Quando você digita
*.ext
O shell o expande para uma lista de todos os arquivos correspondentes, como:
1.ext 2.ext whatever.ext
Isso é o que é passado para o comando, no seu caso mv
. Se mv
receber mais de dois argumentos, o último deve ser um diretório, então
mv *.ext *.new
falha com *.new
não é um diretório, porque mv
está recebendo uma longa lista de argumentos.
O próprio shell não suporta regex, mas o Linux tem muitos utilitários como o renomeio do perl ...
rename -n 's/(.*)\.ext/.new/' *
E remova -n
após o teste para realmente renomear ...
Mas você pode capturar os nomes variáveis em uma variável e usá-la para fazer um loop pelos arquivos ...
for f in *.ext; do echo mv -v -- "$f" "${f/.ext/.new}"; done
e remova echo
após o teste para concluir a renomeação ... Você pode usar praticamente qualquer comando com for
, não apenas mv
. Aqui está um exemplo ligeiramente diferente com base na sua pergunta:
for f in *.bin; do
firmtool build "${f%.bin}.firm" -n 0x23F00000 -e 0 -D "$f" -A 0x23F00000 -C NDMA
done
Nesse caso, ${f%.bin}
será expandido para o valor da variável f
com o sufixo .bin
retirado (se tiver esse sufixo; caso contrário, ele se expandirá para o valor de f
).
Consulte o manual em Expansão do Parâmetro do Shell para outros tipos de expansão .
1 aguarda comprovação errada