Categories
Linux Programação Tutoriais

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

Como adicionar a data atual ao conteúdo de uma variável de criação de nome de arquivos no Bash shell.
Veja várias possibilidade de personalização dos nomes dos seus arquivos.

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 conhecer 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 for definir o nome do arquivo, dentro do script, basta atribuir-lhe o valor da variável nomearquivo.
O post Como realizar backup incremental no Linux tem um exemplo real do procedimento — se quiser 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 da variável 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’.

By 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!

2 replies on “Como adicionar a data atual ao nome de um arquivo no Bash.”

Posso fazer uma pergunta? Eu crio o código, conforme você ensinou, no entanto, quando eu fecho o terminal, o código é esquecido pelo terminal. O que eu preciso fazer para que ele fique gravado, de modo que eu possa utilizá-lo em um comando no cron?
Obrigado!

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.