Autor Tópico: remover exceto algo  (Lida 3016 vezes)

Offline sigur

  • Usuário Ubuntu
  • *
  • Mensagens: 1.176
    • Ver perfil
remover exceto algo
« Online: 25 de Fevereiro de 2012, 12:25 »
Pessoal, toda vez que compilo um .tex, são gerados vários auxiliares. Alguns editores possuem recursos para limpar o output e daí podemos escolher o que queremos limpar.

Porém, queria fazer o seguinte: criar um script que remova tudo na pasta, exceto arquivos de determinadas extensões, como o .tex, lógico.

Daí, posso pedir pro editor executar o comando quando compilo:
Código: [Selecionar]
latex %f.tex;  meuscript pois o ; irá executar o segundo comando em seguida, não irá?

Alguma ajuda?

Offline Rafa Henrique

  • Usuário Ubuntu
  • *
  • Mensagens: 292
  • Linux! Um Grito de Liberdade.
    • Ver perfil
Re: remover exceto algo
« Resposta #1 Online: 25 de Fevereiro de 2012, 12:31 »
tente

Código: [Selecionar]
latex %f.tex && meuscript

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: remover exceto algo
« Resposta #2 Online: 25 de Fevereiro de 2012, 13:36 »
Dá pra fazer usando o find e outras ferramentas, o normal - no caso descrito - seria escrever um makefile, mas em bash puro
Código: [Selecionar]
#!/bin/bash
shopt -s extglob
for i in !(*.tex|*.pdf); do
  [[ ! -f "$i" ]] && continue
  alguma_coisa "$i"
done
Vai ignorar *.tex, *.pdf e não arquivos normais (diretórios, links simbólicos...).

Offline fpissarra

  • Usuário Ubuntu
  • *
  • Mensagens: 246
    • Ver perfil
    • Lost in the e-Jungle
Re: remover exceto algo
« Resposta #3 Online: 25 de Fevereiro de 2012, 13:39 »
Uma maneira simples de, por exemplo, apagar todos os arquivos que não sejam ".tex" é essa.

Código: [Selecionar]
files=$(ls | egrep -v \.tex$)
for i in files; do
  rm "$i"
done

O -v no grep inverte o sentido da regular expression... Ou seja, o grep vai obter tudo o que NÂO "bater" com ela.

OBS: Se quiser acrecentar multiplas extensões de arquivo, modifique a regular expression para algo assim:

Código: [Selecionar]
\.(tex|pdf)$
O motivo de usar egrep ao invés de grep é que egrep implementa extensões à regular expression. É a mesmc coisa que usar "grep -e".

[]s
Fred
« Última modificação: 25 de Fevereiro de 2012, 13:59 por fpissarra »

Offline sigur

  • Usuário Ubuntu
  • *
  • Mensagens: 1.176
    • Ver perfil
Re: remover exceto algo
« Resposta #4 Online: 25 de Fevereiro de 2012, 14:04 »
Galera, que bacana, quanta possibilidade. Obrigado pelas dicas. Vou testar certinho.

Só uma coisa que surgiu, quando o amigo irtigor alertou que apagará todo o resto.

Pois bem, no texmaker dá pra configurar de modo que ele compile latex %f.tex ou seja, o %f é o nome do arquivo aberto. Então, eu não queria apagar tudo exceto o .tex, mas sim, todos os arquivos que foram gerados, ou seja, todos eles são nomeados com %f, só as extensões é que mudam. Daí, gostaria que o script recebesse esse nome, algo do tipo meuscript %f e ele faria o trabalho de limpar, como se fosse algo rm %f.* exceto %f.tex

Será que deu pra entender? O script precisa receber um argumento.

Abraços.
Vou estudar os exemplos.

Offline irtigor

  • Equipe Ubuntu
  • Usuário Ubuntu
  • *****
  • Mensagens: 4.344
  • Delete, delete, delete!
    • Ver perfil
Re: remover exceto algo
« Resposta #5 Online: 25 de Fevereiro de 2012, 14:55 »
Então complemente, provavelmente, com substituição de parâmetro
Código: [Selecionar]
#!/bin/bash
shopt -s extglob
alguma_coisa "${1%.*}"!(*.pdf|*.tex)