Domine o Comando `date` no Linux: Guia Completo com Truques!

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.