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’.
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!
Você pode usar o comando history para obter uma relação de comandos digitados no terminal