Como adicionar a data atual ao nome de um arquivo no Bash.

Esta dica pode ajudar em diversas situações, principalmente quando se quer criar um arquivo de dentro de um script Bash e se deseja incluir uma string com a data atual no próprio nome do arquivo.
Um dos casos em que se pode aplicar o recurso é um script de backup de segurança.
Veja alguns exemplos de como chegar ao resultado, no decorrer deste texto.
Se você tiver alguma solução diferente, sinta-se à vontade para compartilhá-la nos comentários.
Para obter a data atual, no formato dia-mês-ano, use a seguinte fórmula:


hoje=$(date +"%d-%m-%y")


O código Bash, acima, irá armazenar dentro da variável hoje a data no formato determinado anteriormente. Para poder ver conteúdo da variável, use o comando echo:


echo "a data atual é: $hoje."

Veja o meu resultado:

a data atual é: 23-04-17.

Para inserir o valor da data atual em uma variável com o nome de um arquivo, basta alterar estes exemplos.
Segue algumas dicas:


hoje=$(date +'%d-%m-%y')
nomearquivo=nomearquivo-$hoje

Para obter o valor da variável nomearquivo, use novamente o comando echo:


echo $nomearquivo
nomearquivo-23-04-17

Quando você for definir o nome do arquivo, dentro do script, basta lhe atribuir o valor da variável nomearquivo.
O post Como realizar backup incremental no Linux tem um exemplo real. Sugiro dar uma olhada.
Se preferir que o ano seja exibido com 4 dígitos, use o %Y (em maiúscula):


hoje=$(date +'%d-%m-%Y'); echo "Data atual: $hoje."

Exemplos de formatação do date no Bash Shell

Acompanhe mais alguns exemplos de formatação do comando.
Para incluir o nome do dia da semana:


hoje=$(date +'%A-%d-%m-%Y'); nomearquivo=backup-$hoje.bak; echo "Nome do meu arquivo de backup, hoje: $nomearquivo."
Nome do meu arquivo de backup, hoje: backup-domingo-23-04-2017.bak.

Ou, ainda, com o nome do mês completo:


hoje=$(date +'%A-%d-%B-%Y'); nomearquivo=backup-$hoje.bak; echo "Nome do meu arquivo de backup, hoje: $nomearquivo."
Nome do meu arquivo de backup, hoje: backup-domingo-23-abril-2017.bak.

E se eu precisar criar vários arquivos de backup, no mesmo dia?! Como posso adicionar a data (que vai ser a mesma), sem sobrescrever arquivos?
Há várias soluções para este caso.
A minha preferida é usar ‘%s’ no lugar de ou em adição ao nome do arquivo.
Este parâmetro retorna o número de segundos decorridos desde 1970-01-01 00:00:00 UTC.
Veja um exemplo:


minhadata=$(date +'%s')
nomearq=arq-$minhadata
echo -e "Nome do arquivo: $nomearq."

Para mim, o resultado da sequencia de comandos acima, foi:

Nome do arquivo: arq-1493045947.

Desta forma, basta que os arquivos sejam criados com uma diferença de, pelo menos, 1 segundo em relação ao outro.
Se esta não for uma necessidade, prefiro usar apenas o parâmetro ‘%F’:



minhadata=$(date +'%F');nomearq=arq-$minhadata;echo -e "\nNome do meu arquivo:\t$nomearq."
Nome do meu arquivo:	arq-2017-04-24.

Ou o ano (em 4 dígitos) seguido do número do dia, uma vez que a data já é exibida à direita dos nomes dos arquivos, na listagem dos diretórios — o que torna esta informação redundante.
Veja um exemplo:


minhadata=$(date +'%Y-%j');nomearq=arq-$minhadata;echo -e "\nNome do meu arquivo:\t$nomearq."
Nome do meu arquivo:	arq-2017-114.

Saiba mais usando o ‘man date’.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia.
Fã de séries, como “Rick and Morty” e “BoJack Horseman”.
Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *