Seguinte:
Tenho vários diretórios onde são gerados alguns arquivos, onde o padrão
deles é que terminam com a extensão ".txt", por exemplo:
banana.txt
ventilador.txt
regua.txt
arquivocomnomegrande.txt
e por aí vai.
gostaria na verdade de alguma rotina com o SED (que agisse de forma
recurssiva nos diretorios que eu indicar) que somente tirasse as
extensões deles, sem alterar seu conteudo, ou seja:
banana.txt ficaria banana
ventilador.txt ficaria ventilador
regua.txt ficaria regua
arquivocomnomegrande.txt ficaria arquivocomnomegrande
em resumo, seria a mesma coisa que eu fizesse manualmente o seguinte:
mv banana.txt banana
mv ventilador.txt ventilador
mv regua.txt regua
mv arquivocomnomegrande.txt arquivocomnomegrande
Como posso fazer isso?
abraço,
Flávio
Aqui poderia utilizar também o comando "basename":
NAME=`basename ${a} .txt`
> echo ${NAME} # imprimira "banana" de um "banana.txt"
> mv $a ${NAME} # mv banana.txt banana
> done
No mais poderia utilizar a mesma lógica...
Apenas não tens a recursividade.
Neste caso eu substituiria o "for" por um "find":
find /CAMINHO_INICIAL_DE_PROCURA -name "*.txt" -exec mv {} `echo {} |
sed -e 's/.txt$//g' \;
Explicando:
find = comando de procura
/CAMINHO_INICIAL_DE_PROCURA = diretório onde iniciaremos a procura
-name "*.txt" = filtro para buscar somente arquivos que terminem com a
extensão .txt
-exec = executa um comando (o comando fica entre o exec e o sinal de
finalizaçao: o "\;")
Não entrarei em detalhes do comando, mas qualquer dúvida entre em contato.
Daniel.
for a in *.txt; doNAME=`echo ${a} | sed s/.txt$//`echo ${NAME} # imprimira "banana" de um "banana.txt"mv $a ${NAME} # mv banana.txt bananadone... e etc :)