remover exceto algo

Iniciado por sigur, 25 de Fevereiro de 2012, 12:25

tópico anterior - próximo tópico

sigur

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:
latex %f.tex;  meuscript
pois o ; irá executar o segundo comando em seguida, não irá?

Alguma ajuda?

Rafa Henrique


irtigor

Dá pra fazer usando o find e outras ferramentas, o normal - no caso descrito - seria escrever um makefile, mas em bash puro

#!/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...).

fpissarra

#3
Uma maneira simples de, por exemplo, apagar todos os arquivos que não sejam ".tex" é essa.

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:

\.(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

sigur

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.

irtigor

Então complemente, provavelmente, com substituição de parâmetro

#!/bin/bash
shopt -s extglob
alguma_coisa "${1%.*}"!(*.pdf|*.tex)