Com o GNU find
(possivelmente disponível como gfind
no seu sistema):
find . -mindepth 1 -maxdepth 1 -printf '%-58P %TF %AF\n'
Imprime o nome do arquivo, a data da última modificação (data de criação do conteúdo do arquivo, se desejar) e a data do último acesso no formato AAAA-mm-dd.
Para restringir a .txt
e .bkp
arquivos não acessados nos últimos 365 dias:
find . -mindepth 1 -maxdepth 1 \
\( -name '*.txt' -o -name '*.bkp' \) \
-atime +364 -printf '%-58P %TF %AF\n'
As colunas devem estar alinhadas, desde que os nomes de arquivo não contenham caracteres de controle ou de byte múltiplo ou de largura zero ou de largura dupla e não tenham mais de 58 bytes.
A primeira coluna é alinhada à esquerda, terceira à direita (assumindo um terminal de 80 colunas), a segunda é deslocada para a direita para deixar espaço para os nomes dos arquivos. Ajuste a largura e o espaçamento do nome do arquivo se você realmente quiser centralizá-lo.
Observe que a lista de arquivos não está classificada.
Com ast-open ls
(ou o ls
incorporado do ksh93 se construído com ele):
ls -AZ '%-58(name)Ls %(mtime:%F)s %(atime:%F)s'
Deve-se preservar o alinhamento para caracteres de múltiplos bytes, largura zero e largura dupla e classificar a lista.
com zsh
:
#! /bin/zsh -
zmodload zsh/stat
for f (*(DN)) {
stat -LH s -F %F -- $f &&
printf '%-58s %s %s\n' $f $s[mtime] $s[atime]
}
Para restringir a .txt
e .bkp
arquivos não acessados nos últimos 365 dias, substitua *(DN)
por *.(txt|bkp)(DNa+364)
.
Deve-se preservar o alinhamento para caracteres de múltiplos bytes e classificar os nomes dos arquivos.
Como não há um comando padrão para recuperar a modificação e o tempo de acesso de maneira confiável, portualmente, como sempre, sua melhor aposta pode ser usar perl
:
perl -MPOSIX -Mlocale -Mopen=locale -MEncode::Locale -MEncode -e '
opendir D, "." || die "open .: $!\n";
for (
sort {$a->[1] cmp $b->[1]}
map {[$_, decode(locale => $_)]}
grep {!/^\.{1,2}\z/}
readdir D
) {
if (@s = lstat$_->[0]) {
printf("%-58s %s %s\n", $_->[1],
map {strftime("%Y-%m-%d", localtime $_)} ($s[9], $s[8]))
} else {warn "$_: $!\n"}
}'
Assim como a abordagem zsh
, ela deve preservar o alinhamento para caracteres de multibyte e classificar os nomes de arquivo de acordo com a ordem de ordenação de localidade.
Como o Solaris 10 vem com uma versão antiga de perl
, talvez seja necessário desistir do suporte a caracteres não-ASCII em nomes de arquivos, o que simplificaria:
perl -MPOSIX -e '
opendir D, "." || die "open .: $!\n";
for (sort grep {!/^\.{1,2}\z/} readdir D) {
if (@s = lstat$_) {
printf("%-58s %s %s\n", $_,
map {strftime("%Y-%m-%d", localtime $_)} ($s[9], $s[8]))
} else {warn "$_: $!\n"}
}'
Para restringir a .txt
e .bkp
arquivos não acessados nos últimos 365 dias, substitua !/^\.{1,2}\z/
por /\.(txt|bkp)\z/ && -A > 365