Encontrei isso logo depois de postar a pergunta:
for f in file1.*; do mv "$f" "${f/file1/newfilename}"; done
Funciona como um encanto.
Eu tenho um diretório contendo um monte de arquivos com diferentes extensões, mas o nome do arquivo antes da extensão é o mesmo. Por exemplo, file1.txt, file1.jpg, file1.pdf, file1.odt ...
Eu quero alterar a parte 'file1', mas não a extensão, então o resultado seria, por exemplo, newfilename.txt, newfilename.jpg, newfilename.pdf, newfilename.odt
Eu não consigo descobrir como fazer isso sem tediosamente executar mv file1.txt newfilename.txt
em cada um. Eu posso encontrar muitos tuturials on-line para alterar os nomes de arquivos com expansão de cinta se você souber todas as partes para expandir, mas nada apenas substituir file1 com newfilename, não importa qual a extensão. Isso é possível, ou estou latindo na árvore errada?
Obrigado
EDIT: desculpe, não momentos depois de postar isso eu encontrei uma página diferente nos meus resultados do Google que respondeu a pergunta para mim: for f in file1.*; do mv "$f" "${f/file1/newfilename}"; done
funciona perfeitamente.
Você pode fazer isso com o bash, mas existem outras ferramentas mais adequadas para o trabalho.
Na maioria das distros:
rename file1 newfilename file1.*
No Debian e no Ubuntu, substitua rename
por rename.ul
.