giovannikenpachi
(usa Ubuntu)
Enviado em 09/08/2010 - 21:17h
Vou te mostra dois:
$ for i in *.txt; do mv $i `echo $i | cut -d. -f1`.html; done
Ou com muito mais elegância e segurança:
$ rename 's/\.txt/\.html/' *.txt
O primeiro faz um loop for em todos os arquivos com extensão .txt e atribui o seu nome na variável $i, em seguida move o arquivo (mv) de $i para o resultado dos comandos que estão entre acentos + .html
Os comandos entre os acentos fazem o seguinte
ecoa nome do arquivo ($i) o resultado vai para o comando "corte" (cut) considerando o divisor "." (-d.) e pega o primeiro grupo (-f1)
A primeira vista parece complicado mas é simples, estude o que faz o comando de pipe line (|) o comando cut e o significado das aspas simples, duplas, comandos entre acentos. Dê uma olhada nos loops em shell script e nos operadores coringas (*, ?, [])
O segundo comando que é mais seguro pois não move os arquivos (o que se não usado com cuidado pode fazer perder arquivos) é um programa que já vem em quase todos os linux, é quase um comando básico.
O comando rename renomeia vários arquivos de uma só vez e tem como primeiro parâmetro uma expressão regular em perl seguido do conjunto de arquivos (no caso todos que terminam com a extensão txt). A expressão 's/\.txt/\.html/' substitui as ocorrências de ".txt" para ".html". Procure por expressões regulares em perl para mais informações e mais expressões poderosas (é chato mas é muito útil)