O comando `date` é uma ferramenta essencial presente no shell Bash, o interpretador de comandos padrão em grande parte das distribuições Linux e também no macOS. Este guia prático visa demonstrar como utilizar o comando `date` de maneira eficaz na linha de comando e em scripts shell, indo além da simples exibição da hora.
Ao executar o comando `date` sem argumentos, você obtém a data e hora atuais, configuradas de acordo com seu fuso horário:
date
A formatação padrão pode parecer um pouco estranha, com o ano posicionado ao final, após o fuso horário. No entanto, o comando `date` oferece total controle sobre a formatação da saída, com mais de 40 opções para personalizar a apresentação da data e hora conforme suas necessidades.
Para utilizar qualquer opção, digite `date`, um espaço, o sinal de mais `+` e a opção desejada, incluindo o sinal de porcentagem inicial. A opção `%c`, por exemplo, exibe a data e hora no formato padrão associado à sua localidade. Essa localidade é determinada pelas configurações geográficas e culturais definidas durante a instalação do sistema operacional, influenciando aspectos como símbolos de moeda, formatos de papel, fuso horário e outras convenções.
date +%c
Perceba como o ano agora surge em uma posição mais intuitiva na saída.
É possível combinar diversas opções em uma única string de formato. Para exibir o nome do dia da semana (%A), o dia do mês (%d) e o nome do mês (%B), utilize o seguinte comando:
date +%A%d%B
Embora funcione, a saída pode não ser a mais agradável visualmente. Para inserir espaços entre os elementos, envolva a string de formato entre aspas, mantendo o `+` fora delas:
date +"%A %d %B"
Além disso, você pode incluir texto na string de formato:
date +"Hoje é: %A %d %B"
Navegar pela página de manual do `date` em busca da opção ideal pode se tornar cansativo. Para facilitar a consulta, organizamos as opções em categorias:
Opções para Data e Hora
%c: Exibe a data e hora no formato da sua localidade, incluindo o fuso horário.
Opções para Data
%D: Apresenta a data no formato mm/dd/aa.
%F: Exibe a data no formato aaaa-mm-dd.
%x: Mostra a data no formato da sua localidade.
Opções para o Dia
%a: Exibe o nome do dia da semana abreviado (Seg, Ter, Qua…).
%A: Mostra o nome completo do dia da semana (Segunda, Terça, Quarta…).
%u: Apresenta o número do dia da semana (Segunda = 1, Terça = 2…).
%w: Exibe o número do dia da semana (Domingo = 0, Segunda = 1…).
%d: Mostra o dia do mês, com um zero à esquerda (01, 02… 09).
%e: Apresenta o dia do mês, com um espaço à esquerda (‘ 1’, ‘ 2’… ‘ 9’).
%j: Exibe o dia do ano, com zeros à esquerda (se necessário).
Opções para a Semana
%U: Exibe o número da semana do ano, considerando o domingo como o primeiro dia da semana.
%V: Apresenta o número da semana ISO do ano, considerando a segunda-feira como o primeiro dia da semana.
%W: Mostra o número da semana do ano, com a segunda-feira como o primeiro dia.
Opções para o Mês
%b ou %h: Apresenta o nome do mês abreviado (Jan, Fev, Mar…).
%B: Exibe o nome completo do mês (Janeiro, Fevereiro, Março…).
%m: Mostra o número do mês, com zero à esquerda (01, 02, 03… 12).
Opções para o Ano
%C: Apresenta o século sem o ano (em 2019, seria 20).
%y: Exibe o ano com dois dígitos (em 2019, seria 19).
%Y: Mostra o ano com quatro dígitos.
Opções para a Hora
%T: Apresenta a hora no formato HH:MM:SS.
%R: Exibe a hora e os minutos como HH:MM (relógio de 24 horas).
%r: Mostra a hora de acordo com a sua localidade (relógio de 12 horas com AM/PM).
%X: Exibe a hora no formato da sua localidade (relógio de 24 horas, embora possa se comportar como %r em alguns casos).
Opções para a Hora
%H: Apresenta a hora no formato 00, 01, 02… 23.
%I: Exibe a hora (relógio de 12 horas) no formato 00, 01, 02… 12, com zero à esquerda.
Opções para Minutos
%M: Exibe os minutos, 01, 02, 03… 59, com zero à esquerda.
Opções para Segundos
%s: Exibe o número de segundos desde 01/01/1970 00:00:00 (Época Unix).
%S: Apresenta os segundos, 01, 02, 03… 59, com zero à esquerda.
%N: Mostra os nanossegundos.
Opções para o Fuso Horário
%z: Exibe a diferença de tempo entre seu fuso horário e UTC.
%:z: Apresenta a diferença de tempo (com ‘:’ entre horas e minutos).
%::z: Mostra a diferença de tempo (com ‘:’ entre horas, minutos e segundos).
%Z: Exibe o nome alfabético do fuso horário.
Opções de Formatação
%p: Exibe o indicador AM ou PM em maiúsculas.
%P: Mostra o indicador am ou pm em minúsculas.
%t: Imprime uma tabulação.
%n: Insere uma nova linha.
Modificadores de Opções
Estes modificadores podem ser adicionados entre o `%` e a letra de opção para alterar a exibição. Por exemplo, `%-S` remove o zero à esquerda em valores de segundos.
-: Impede o preenchimento com zero em valores de um dígito.
_: Adiciona espaços à esquerda em valores de um dígito.
0: Insere zeros à esquerda em valores de um dígito.
^: Utiliza maiúsculas (se possível).
#: Inverte o caso padrão da opção (se possível).
Truques Úteis
Para obter a hora da última modificação de um arquivo, use a opção `-r` (referência). Use um hífen `-` em vez de `%` e não é necessário o `+`. Teste em sua pasta inicial:
date -r .bashrc
A variável de ambiente `TZ` permite alterar o fuso horário em um comando específico:
TZ=GMT date +%c
`date` em Scripts
É trivial utilizar o comando `date` em scripts Bash. Crie um arquivo de texto com o seguinte conteúdo e salve-o como `gd.sh`:
#!/bin/bash TODAY=$(date +"Hoje é %A, %d de %B") TIMENOW=$(date +"A hora local é %r") TIME_UK=$(TZ=BST date +"A hora no Reino Unido é %r") echo $TODAY echo $TIMENOW echo $TIME_UK
Defina as permissões de execução para tornar o script executável:
chmod +x gd.sh
Execute o script:
./gd.sh
O comando `date` pode gerar um carimbo de data/hora. O script a seguir cria um diretório com o nome do carimbo e copia todos os arquivos de texto da pasta atual. Ao executar este script periodicamente, é possível criar uma série de diretórios com diferentes versões dos seus arquivos.
Este sistema não é robusto para backup, mas serve para fins ilustrativos. Crie um arquivo de texto com o seguinte conteúdo e salve-o como `snapshot.sh`:
#!/bin/bash # obter a data e a hora date_stamp=$(date +"%F-%H-%M-%S") # criar um diretório com esse nome mkdir "$date_stamp" # copiar os arquivos da pasta atual para ele cp *.txt "$date_stamp" # finalizado, exibir mensagem e sair echo "Arquivos de texto copiados para o diretório: "$date_stamp
Defina as permissões de execução para tornar o script executável:
chmod +x snapshot.sh
Execute o script:
./snapshot.sh
Um diretório com o nome da data e hora em que o script foi executado será criado. Este diretório conterá cópias dos arquivos de texto.
Com criatividade, até mesmo o comando `date` pode ser utilizado de formas produtivas.