Se você escreve scripts em shell com frequência para manipular grandes volumes de dados já deve ter precisado criar arquivos ou diretórios temporários para armazenar dados intermediários que podem ser descartados no fim do processo. Há inúmeras maneiras de fazer isso e a que apresento aqui é uma delas, usando a ferramenta “mktemp” que já vem instalada por padrão em várias distros Linux.
Arquivos e diretórios temporários
A ferramenta “mktemp” vem por padrão no pacote “GNU coreutils” então a probabilidade de não que não exista no seu sistema é praticamente nula e seu fim é unicamente criar arquivos/diretórios temporários.
Além do fato de que um arquivo ou diretório temporário mantém dados intermediários que serão descartados no final de um processamento, outras características esperadas nestes objetos e que os diferencia de arquivos e diretórios comuns são:
- ser criado em uma área adequada para isso (/tmp, no caso de ambientes Linux);
- ter nome descartáveis (nomes gerados aleatoriamente que não precisem expressar sua finalidade – já que não interessa ao usuário o seu conteúdo);
- remoção ao término do processo.
Com exceção do último item que só durante a codificação do script é que se pode determinar o momento exato da sua exclusão, os dois primeiros são assegurados pelo mktemp.
Criando tempfiles e tempdir
Seu uso básico é bastante simplório. Invocar o comando ‘mktemp’ na linha de comandos, sem qualquer parâmetro, criará um arquivo no seu disco, dentro de /tmp, e cujo nome será exibido na tela.
$ mktemp /tmp/tmp.dMcCMAs91H
A criação de diretórios é tão simples quanto, basta adicionar o parâmetro “-d” a linha de comandos.
$ mktemp -d /tmp/tmp.4Th6QsiLfG
Usando na prática
Na prática não adianta o nome do arquivo ou diretório temporário ser exibido na tela. É preciso que ele seja armazenado em uma variável que possa ser acessada a todo momento que, durante o processamento possa ser lido ou escrito.
No exemplo abaixo há um pequeno script, inútil por sinal, que lista apenas os subdiretórios de um dado caminho. O script está comentado para facilitar a compreensão.
#!/bin/bash #Cria um arquivo temporário TMPF=`mktemp` #Guarda todo o conteúdo do caminho informado ls -l "$1" >$TMPF #Le o arquivo temporário e lista apenas os diretórios grep ^d $TMPF rm $TMPF
Veja que o comando “mktemp” foi invocado em um subshell (entre “ – crase) e sua saída armazenada na variável “TMPF”.
Depois, para que o arquivo possa ser lido ou gravado basta usar a variável, onde haveria o nome do arquivo, como feito nos comandos “ls”, “grep” e “rm”.
Se fosse necessário criar diretórios, como já dito, o processo é o mesmo, bastando acrescentar um “-d” a linha de comandos do mktemp.
#!/bin/bash TMPD=`mktemp -d` cd $TMPD . . . rmdir $TMPD
Caso você pretenda criar muitos arquivos temporários pode ser interessante criar um diretório temporário e então criar todos os seus arquivos temporários lá dentro. Para tal, usamos o parâmetro “-p” que especifica o caminho onde o arquivo deverá ser criado.
#!/bin/bash TMPD=`mktemp -d` cd $TMPD FILE1=`mktemp -p $TMPD` . . . rm $FILE1 rmdir $TMPD
Só isso. Agora seus scripts poderão usar aquivos temporários de forma mais profissional.