Excluindo muitos arquivos, exceto um tipo [duplicado]

0

Estou escrevendo um script para compilar muitos arquivos .tex . Depois disso, muitos arquivos auxiliares foram criados.

Então, eu gostaria de removê-los no final do script. É difícil usar rm $file.xxx , mas eu teria que escrever todas as extensões manualmente, já que eu quero manter meu arquivo fonte e a saída pdf, então eu não posso usar o * para deletar tudo.

Como excluir todas as extensões, exceto aquelas com extensão .tex/.pdf ?

Obrigado.

    
por Sigur 30.08.2012 / 02:52

2 respostas

1

Bem, você poderia simplesmente ignorar os erros rm , mas isso não é elegante:).

Adicione uma função como esta ao seu ~ / .bashrc:

 function cleantex () {
   find . -name "$1*" | grep -vP '.tex$|.pdf$' | while read -r i; do rm "$i"; done    
  }

Você então o chama com o início (único) de seu nome de arquivo da seguinte forma:

 $ cleantex mytexfile

Ele excluirá todos os arquivos no diretório fornecido que começam com $file e não terminam em .tex ou .pdf . O $ garante que a correspondência esteja apenas no final do arquivo, a extensão. Caso contrário, ele ignorará arquivos como footexfoo.aux porque o nome do arquivo contém tex . Você pode adicionar quantas extensões desejar para ignorar:

 function cleantex () {
       find . -name "$1*" | grep -vP '.tex$|.pdf$|.foo$|.bar$' | while read -r i; do rm "$i"; done    
      }

Se você quiser remover esses arquivos de dentro de um script bash, você realmente não precisa da função. Basta adicionar esta linha ao seu script (alterando mytexfile para o nome do arquivo tex):

find . -name "mytexfile*" | grep -vP '.tex$|.pdf$' | while read -r i; do rm "$i"; done

Por fim, se você quiser fazer isso para todos os arquivos tex, seja qual for o nome deles, use:

find . -name "*.tex" | sed 's/\.tex$//' | while read -r name; do 
    find . -name "$name"* | grep -vP '.tex$|.pdf$' | while read -r i; 
      do
        rm "$i"; 
      done;
done
    
por 30.08.2012 / 03:47
3

Você pode usar:

rm *.{extension1,extension2,extension3}

Como alternativa, você pode usar:

shopt -s extglob
rm !(*.tex|*.pdf)

Isso apagará todos os arquivos que você deseja manter, exceto os arquivos * .tex e * .pdf.

Espero que ajude!

    
por 30.08.2012 / 03:00