Tornar as datas mais legíveis no comando "ls -n"

Escolho sempre “lang” (“idioma”) “en_GB” – “inglês britânico” – porque assim as capturas de tela podem ser compreendidas por usuários de qualquer parte do mundo – ao mesmo tempo em que o “formato” de datas segue um padrão decente – Dia da semana (abreviado), vírgula, dia-do-mês, mês (abreviado), ano completo:

$ locale
LANG=en_GB.UTF-8
LC_CTYPE="en_GB.UTF-8"
LC_NUMERIC="en_GB.UTF-8"
LC_TIME="en_GB.UTF-8"
LC_COLLATE="en_GB.UTF-8"
LC_MONETARY="en_GB.UTF-8"
LC_MESSAGES="en_GB.UTF-8"
LC_PAPER="en_GB.UTF-8"
LC_NAME="en_GB.UTF-8"
LC_ADDRESS="en_GB.UTF-8"
LC_TELEPHONE="en_GB.UTF-8"
LC_MEASUREMENT="en_GB.UTF-8"
LC_IDENTIFICATION="en_GB.UTF-8"
LC_ALL=

Não me refiro ao Conky, nem ao Relógio / Calendário do Painel (KDE) – pois nesses é muito fácil usar o formato que quiser – independente do “locale”.

O Dolphin também não me cria problemas. – Usando “en_GB”, basta ir em “Estilo de data” e escolher “Absolute” – para ter um formato decente, que qualquer 2 neurônios “bate o olho” e entende imediatamente:

Ter os dias, meses, anos, horas, minutos, segundos em uma coluna consistente é muito mais “legível” – do que ter linhas desencontradas, de tamanhos diferentes – e cada linha falando de um conceito diferente:

Até aí, tudo resolvido!

A coisa começa a ficar chata, quando preciso usar comandos simples – principalmente, quando quero salvar os resultados em um arquivo TXT. – Por exemplo:

$ date
Wed 14 Jan 07:08:06 -03 2026

Acho esquisito – a hora e o fuso horário se intrometerem antes do ano. – Isso não é “normal”, para um cidadão comum, que estudou desde o 1º grau no Brasil.

E não se diga que estudar saiu de moda – nem se diga que embaralhar tudo é mais “moderno”. – Até o Android dá as datas e horas de modo compreensível… embora às vezes esqueça de dizer o ano:

Mas voltando aos comandos do bash…

Este aqui, com apenas 3 caracteres, dá um resultado +/- civilizado:

$ stat -c'%w' /run/media/flavio/Linux11/etc
2026-01-04 18:07:21.260863739 -0300

$ stat --help
Usage: stat [OPTION]... FILE...
Display file or file system status.

  -c  --format=FORMAT   use the specified FORMAT instead of the default;
                          output a newline after each use of FORMAT
  %w   time of file birth, human-readable; - if unknown

O parâmetro “-c” diz que é para seguir o formato indicado a seguir – e o “%w” mistura 2 funções: – (a) Diz que se trata da data de criação do arquivo; e – (b) “legível para humanos”.

Infelizmente, no Help do comando “date”, não existe nada que fale em “human” – e muito menos em “readable”. – Pode ser que exista ali o que eu procuro, mas confesso que já gastei os olhos, queimei as pestanas, e não encontrei. – Se alguém encontrar, por favor, me avise! :grimacing:

Inverter a ordem – YYYY-MM-DD – é um formato “ISO”, que a maioria das pessoas também consegue entender rapidamente.

Mas se eu pedir formato “ISO”… fica faltando a hora:

$ date -I
2026-01-14

De qualquer modo, o comando “stat” é bastante civilizado. – Pode-se pegar o resultado bruto:

$ stat -c'%w' /media/flavio/Linux1/etc
2020-01-11 16:55:45.088837179 -0300

$ stat -c'%w' /media/flavio/Linux2/etc
2020-04-15 11:56:24.108519137 -0300

$ stat -c'%w' /media/flavio/Linux3/etc
2020-03-24 10:51:30.538637261 -0300
(...)

… e extrair facilmente um quadro aproveitável – usando alguns “awk”, “sed” – ou o “modo de seleção em bloco” do Kate / KWrite:

Distro              - Installed (UTC-3)

openSUSE Tumbleweed - 2020-01-11 16:55
Arch                - 2020-04-15 11:56
Debian Testing      - 2020-03-24 10:51
Fedora              - 2020-01-12 17:40
KDE Neon            - 2025-07-21 00:24
PCLinuxOS           - 2021-08-09 19:37
Mageia (Cauldron)   - 2020-07-02 19:49
Kubuntu LTS         - 2025-07-13 21:05
Void                - 2020-07-13 10:45
Mint (KDE)          - 2025-07-13 22:05
MX Linux            - 2023-07-31 21:17

A coisa também fica chata, quando vou na pasta onde minha distro “monta” as partições – e tento obter um quadro da situação:

# cd /run/media/flavio/

# ls -n
total 92
dr-xr-xr-x  3 1000 1000   20 Jun  9  2021 Home1
drwxr-xr-x  5    0    0 4096 Apr 22  2024 Home10
drwxr-xr-x  6    0    0 4096 Jan  8 21:38 Home11
drwxr-xr-x  4 1000 1000 4096 Jul 22  2020 Home12
drwxr-xr-x  6 1000 1000 4096 Feb  5  2022 Home3
drwxr-xr-x  4    0    0 4096 Jul 29 21:00 Home4
drwxr-xr-x  4    0    0   38 Nov 25 16:53 Home5
drwxr-xr-x  5 1000 1000 4096 Dec 30 06:57 Home6
drwxr-xr-x  5    0    0 4096 Jun 28  2025 Home7
drwxr-xr-x  5    0    0 4096 Feb 15  2025 Home8
drwxr-xr-x  4 1000 1000 4096 Jul 13  2020 Home9
drwxr-xr-x  1 1000 1000  252 Jan 11 20:43 Linux1
drwxr-xr-x 22    0    0 4096 Jul 13  2025 Linux10
drwxr-xr-x 23    0    0 4096 Jan 11 15:51 Linux11
drwxr-xr-x 18    0    0 4096 Aug 30 22:43 Linux12
drwxr-xr-x 19 1000 1000 4096 Dec 28 23:48 Linux3
dr-xr-xr-x 21    0    0 4096 Dec 23 07:41 Linux4
drwxr-xr-x 23    0    0 4096 Jan 11 20:01 Linux5
drwxr-xr-x 26    0    0 4096 Jan 11 19:47 Linux6
drwxr-xr-x 21 1000 1000 4096 Jun 29  2025 Linux7
drwxr-xr-x 21    0    0 4096 Jul 13  2025 Linux8
drwxr-xr-x 18 1000 1000 4096 Jan 11 17:53 Linux9
drwxr-xr-x  8 1000 1000 4096 Jun 25  2025 Midia
drwxr-xr-x  4 1000 1000 4096 Dec  5  2023 Sites
drwxr-xr-x  9 1000 1000 4096 Dec 28 14:16 Warehouse
drwxr-xr-x  3 1000 1000 4096 May 21  2023 Works

O resultado é insano! – Os dias vêm depois dos meses – e algumas linhas dão o ano – enquanto outras linhas dão as horas!

Tudo bem… “basta” pedir um formato “long-ISO” – para obter um quadro civilizado, que qualquer 2 neurônios consegue entender, sem ficar fazendo “cálculos mentais” para traduzir em “linguagem de gente”:

$ ls -n --time-style=long-iso
total 92
dr-xr-xr-x  3 1000 1000   20 2021-06-09 17:05 Home1
drwxr-xr-x  5    0    0 4096 2024-04-22 10:08 Home10
drwxr-xr-x  6    0    0 4096 2026-01-08 21:38 Home11
drwxr-xr-x  4 1000 1000 4096 2020-07-22 18:17 Home12
drwxr-xr-x  6 1000 1000 4096 2022-02-05 11:43 Home3
drwxr-xr-x  4    0    0 4096 2025-07-29 21:00 Home4
drwxr-xr-x  4    0    0   38 2025-11-25 16:53 Home5
drwxr-xr-x  5 1000 1000 4096 2025-12-30 06:57 Home6
drwxr-xr-x  5    0    0 4096 2025-06-28 19:23 Home7
drwxr-xr-x  5    0    0 4096 2025-02-15 05:13 Home8
drwxr-xr-x  4 1000 1000 4096 2020-07-13 10:46 Home9
drwxr-xr-x  1 1000 1000  252 2026-01-11 20:43 Linux1
drwxr-xr-x 22    0    0 4096 2025-07-13 22:12 Linux10
drwxr-xr-x 23    0    0 4096 2026-01-11 15:51 Linux11
drwxr-xr-x 18    0    0 4096 2025-08-30 22:43 Linux12
drwxr-xr-x 19 1000 1000 4096 2025-12-28 23:48 Linux3
dr-xr-xr-x 21    0    0 4096 2025-12-23 07:41 Linux4
drwxr-xr-x 23    0    0 4096 2026-01-11 20:01 Linux5
drwxr-xr-x 26    0    0 4096 2026-01-11 19:47 Linux6
drwxr-xr-x 21 1000 1000 4096 2025-06-29 11:47 Linux7
drwxr-xr-x 21    0    0 4096 2025-07-13 21:10 Linux8
drwxr-xr-x 18 1000 1000 4096 2026-01-11 17:53 Linux9
drwxr-xr-x  8 1000 1000 4096 2025-06-25 07:41 Midia
drwxr-xr-x  4 1000 1000 4096 2023-12-05 03:18 Sites
drwxr-xr-x  9 1000 1000 4096 2025-12-28 14:16 Warehouse
drwxr-xr-x  3 1000 1000 4096 2023-05-21 16:23 Works

Procurei algum modo de “configurar” o bash – ou, pelo menos, cada comando “cli” que me interessa (o que seria trabalhoso, mas felizmente são poucos) – e não encontro.

O bash já está configurado – “en_GB” – e parece que isso é tudo que posso fazer.

A resposta mais comum, nos vários Fóruns que meu Google costuma pesquisar, é: – “Faça um alias”!

Hum… Ok, faço um alias – mas teria de ser específico para “ls -n”. – Vamos dizer que eu chame de “lsn”? – Vou ter de lembrar isso, todas as vezes que for usar – porque não quero prejudicar o “ls” (simples), nem afetar outros parâmetros do “ls”, que posso precisar amanhã.

E teria de fazer vários outros “aliases” – um para cada comando que eu precisar usar – porque o comportamento de cada comando, na hora de dar data & hora, é diferente do comportamento dos outros comandos.

Meu reino por uma configuração que valesse para todos os comandos – na hora de apresentarem data & hora.

Alguma dica? Alguma esperança? Alguma luz no fim do túneo??

3 curtidas

Em primeiro lugar: porque não se mudar para a Irlanda?

LC_TIME=en_IE.UTF-8 date
Wed 14 Jan 2026 19:01:40 -03

Ou qualquer outro país no /etc/locale.gen que fale inglês e use dia/mês/ano.

O -I aceita um parâmetro opcional para expor a data com mais precisão. Se liga na documentação (date --help):

  -I[FMT], --iso-8601[=FMT]  emite a data e a hora no formato ISO 8601.
                               FMT="date" para apenas data (padrão),
                               "hours", "minutes", "seconds" ou "ns"
                               para data e horário com a precisão indicada

Ou seja, date -Is e date --iso-8601=seconds irão dar o formato que você busca (ou ns, que deixa com os nanossegundos, parecido com o stat). Não há espaços, o que pode deixar alguém não iniciado meio desconfortável, mas é mais legível que o padrão americano.

$ date -Is
2026-01-14T18:22:18-03:00

Outra opção é montar seu próprio ‘date legível’ usando o +, que permite inserir formatações de modo parecido com stat (leia abaixo de FORMATO controla a saída. As sequências interpretadas são para ver os %'s aceitos).

Para análise de dados assim, a minha preferência é obter o dado em “segundos desde a epoch” (ou seja, o Unix Timestamp) e usar o comando date +FMT para “massagear” no formato desejado (ou se disponível no programa, usar o formato que quero diretamente – infelizmente não é caso do stat).

$ nasc_epoch=$(stat -c%W /etc/pacman.conf)
$ echo 'Instalei' "$(sed -n 's/^ID=//p' /etc/os-release)" 'em' "$(date -d "@$nasc_epoch" +'%d/%m/%Y às %H:%M')"
Instalei artix em 19/03/2025 às 05:35

O ls especificamente aceita uma variável de ambiente no lugar de uma opção na linha de comando. No meio de ls --help

O argumento de TIME_STYLE pode ser full-iso, long-iso, iso, locale ou
+FORMAT. FORMAT é interpretado como no date(1). Se FORMATO for
FORMATO1<nova-linha>FORMATO2, então FORMATO1 se aplica a arquivos não
recentes e FORMATO2 a arquivos recentes. TIME_STYLE prefixado com
“posix-” tem efeito somente fora do locale POSIX. Além disso, a
variável de ambiente TIME_STYLE define o estilo padrão para usar.

Ou seja, jogue export TIME_STYLE=long-iso em seu ~/.bashrc e ls -n não mais lhe agredirá os olhos.

Mesmo para comandos sem esse luxo, você pode fazer o alias coincidir com o próprio comando. A configuração padrão do Arch mesmo sugere incluir a linha alias ls='ls --color=auto' no seu ~/.bashrc (veja /etc/skel/.bashrc).

Logo, além da variável de ambiente, uma outra opção seria inserir alias ls='ls --time-style=long-iso'. Do jeito que isso parece lhe entrar nos nervos, acredito que não se incomode em ter que digitar /bin/ls por extenso caso queira evitar o alias.

O mais perto que tem disso, definir LANG (mais especificamente, o LC_TIME), você já fez. Por dentro, comandos CLI precisam “aceitar” a maneira que sua configuração de idioma dispõe os horários ao usar funções que geram representações da hora (por exemplo, usar %c ou %e na função da biblioteca padrão C strftime).

2 curtidas

Salve, @Capezotte

Do Norte ou do Sul??? :grimacing:

Obrigado pela aula – aliás, um compêndio completo!

Vou precisar de vários dias, para explorar todas essas dicas – com algum cuidado – para não fazer uma mistura maluca.

Por enquanto, fiz isso:

$ LC_ALL=en_IE.UTF-8
$ export LC_ALL

$ locale
LANG=en_GB.UTF-8
LANGUAGE=en_GB
LC_CTYPE="en_IE.UTF-8"
LC_NUMERIC="en_IE.UTF-8"
LC_TIME="en_IE.UTF-8"
LC_COLLATE="en_IE.UTF-8"
LC_MONETARY="en_IE.UTF-8"
LC_MESSAGES="en_IE.UTF-8"
LC_PAPER="en_IE.UTF-8"
LC_NAME="en_IE.UTF-8"
LC_ADDRESS="en_IE.UTF-8"
LC_TELEPHONE="en_IE.UTF-8"
LC_MEASUREMENT="en_IE.UTF-8"
LC_IDENTIFICATION="en_IE.UTF-8"
LC_ALL=en_IE.UTF-8

Também fiz mais um monte de coisas – inclusive dpkg-reconfigure locales – e reiniciei várias vezes – e…

$ date
Wed 14 Jan 22:40:55 -03 2026

$ ls -n
total 84
-rw-r--r-- 1 1000 1001    27 Jan 14 21:53 Conky.txt
drwxr-xr-x 2 1000 1000  4096 May  1  2021 Desktop
drwxr-xr-x 2 1000 1000  4096 Feb 17  2021 Documents
-rw-r--r-- 1 1000 1000     2 Jan 14 22:40 done.txt
drwxr-xr-x 3 1000 1001 12288 May 26  2024 Downloads
-rwxrwxr-x 1 1000 1000   273 Sep 27  2021 MemInfo.sh
-rw-r--r-- 1 1000 1000     9 Jan 14 22:40 MemInfo.txt
drwxr-xr-x 2 1000 1000  4096 Sep 26  2020 Music
drwxr-xr-x 3 1000 1001 16384 May 12  2021 Pictures
drwxr-xr-x 2 1000 1001  4096 Feb 28  2021 PrtScn
drwxr-xr-x 2 1000 1001  4096 Sep 26  2020 Public
-rwxr-xr-x 1 1000 1000  2933 Jul 16 23:46 RAM.sh
drwxr-xr-x 2 1000 1000  4096 Sep 26  2020 Templates
-rwxr-xr-x 1 1000 1000  3176 Nov 26 14:20 VERSIONS.sh
drwxr-xr-x 2 1000 1000  4096 Sep 26  2020 Videos
drwxr-xr-x 2 1000 1000  4096 May 17  2021 Wallpapers

Hora de esfriar a cabeça, dormir, e ver o resto depois de uma boa caminhada.

A propósito: – Estou fazendo todos esses testes, tentativas etc. no Linux Mint – que hoje fiz upgrade de 22.1 parra 22.3 – sem perder o KDE Plasma. – Só sumiu o Synaptic, mas bastou reinstalar, e o ícone dele voltou a aparecer nos “Favoritos” do Menu.

1 curtida

Se lhe servir de consolo, até aqui, em que o sistema está em português:

$ ls -l /etc
total 1216
-rw-r--r-- 1 root root     44 mar 19  2025 adjtime
drwxr-xr-x 1 root root     12 mar 19  2025 alsa
-rw-r--r-- 1 root root    541 set 23 14:16 anacrontab
-rw-r--r-- 1 root root     18 dez 13  2024 arch-release
drwxr-xr-x 1 root root     24 mar 19  2025 artix
-rw-r--r-- 1 root root      1 out 14 11:48 artix-release
drwxr-xr-x 1 root root      0 fev 23  2025 artools
drwxr-xr-x 1 root root      0 nov 23 18:03 audisp
drwxr-xr-x 1 root root     86 jan 12 01:25 audit
[...]

Provavelmente é um comportamento do próprio ls; sem alias ou definir TIME_STYLE, ele vai expor os meses em mmm-dd-yyyy ou mmm-dd hh:ss (para arquivos recentes).

Inclusive, pode definir TIME_STYLE ou criar um alias com --time-style sem medo; eles só afetam o ls quando a lista está no formato um arquivo por linha, o ls puro continua como está.

$ ls --time-style=long-iso /etc
adjtime                 cifs-utils           debuginfod    gimp           infiniband-diags
[...]
$ ls --time-style=long-iso -n /etc
total 1216
-rw-r--r-- 1 0   0     44 2025-03-19 05:40 adjtime
drwxr-xr-x 1 0   0     12 2025-03-19 05:52 alsa
-rw-r--r-- 1 0   0    541 2025-09-23 14:16 anacrontab
-rw-r--r-- 1 0   0     18 2024-12-13 02:01 arch-release
drwxr-xr-x 1 0   0     24 2025-03-19 05:35 artix
-rw-r--r-- 1 0   0      1 2025-10-14 11:48 artix-release
drwxr-xr-x 1 0   0      0 2025-02-23 11:37 artools
drwxr-xr-x 1 0   0      0 2025-11-23 18:03 audisp
drwxr-xr-x 1 0   0     86 2026-01-12 01:25 audit
[...]
2 curtidas

Estou quase fazendo isso:

Se continuo adiando, é por 2 motivos principais:

  1. Cada solução isolada dificulta testar possíveis soluções mais amplas – então, minha “hierarquia de prioridades” é tentar primeiro as possíveis soluções mais gerais; e

  2. Tenho várias distros – cada uma, com suas idiossincrasias. – Talvez só o Arch e o Void estejam “limpos” de gambiarras.

Digo “gambiarras”, porque este é o preço a pagar por distros & DEs “amigáveis” – como os Buntus e seus derivados (Mint, KDE Neon).

Como estou no Mint desde ontem, é nele que tenho testado dúzias & dúzias de dicas de baixo nível (cli, arquivos-raiz), encontradas em comunidades mais técnicas e tutoriais mais “à la antiga”. – E o Mint parece impermeável a tudo!

De repente, futricando no Menu do Mint, encontrei um tal de “Languages”. – É do Xfce4 (acho), porque essa foi a ISO que escolhi, por ser “mais fácil” remover o Xfce após instalar o KDE Plasma. – Quanta ingenuidade, né.

Ao contrário do KDE System Settings, esse “Languages” encontra o Inglês da Irlanda:

Depois, mandei “aplicar geral”:

  • Aliás, não tem “Aplicar”, como no Qt-KDE. – É aquela coisa GTK, que você mexe num botão, e já está aplicado. – Nunca me acostumo com isso…

Reiniciei, e tchan tchan tchan…

$ date
Thu 15 Jan 2026 14:51:40 -03

… mas no ls, nada mudou:

$ ls -n
total 84
-rw-r--r-- 1 1000 1001    27 Jan 14 22:45 Conky.txt
drwxr-xr-x 2 1000 1000  4096 May  1  2021 Desktop
drwxr-xr-x 2 1000 1000  4096 Feb 17  2021 Documents
-rw-r--r-- 1 1000 1000     2 Jan 15 14:50 done.txt
[...]

Então, vamos lá:

$ export TIME_STYLE=long-iso >> ~/.bashrc 
$ source ~/.bashrc

$ ls -n
total 84
-rw-r--r-- 1 1000 1001    27 2026-01-15 14:55 Conky.txt
drwxr-xr-x 2 1000 1000  4096 2021-05-01 13:55 Desktop
drwxr-xr-x 2 1000 1000  4096 2021-02-17 10:26 Documents
-rw-r--r-- 1 1000 1000     2 2026-01-15 14:56 done.txt
[...]

… se bem que… não apareceu:

$ cat ~/.bashrc
# If not running interactively, don't do anything
# [ -z "$PS1" ] && return
PS1="\$ "
# Check the window size after each command and, if necessary,
# update the values of LINES and COLUMNS.
shopt -s checkwinsize
export HISTTIMEFORMAT="%F_%H-%M-%S "
alias crontab='EDITOR=nano /usr/bin/crontab'
1 curtida