shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Obter data de arquivo.


From: Felipe Kellermann
Subject: Re: [shell-script] Obter data de arquivo.
Date: Mon, 22 Dec 2003 23:13:44 -0200 (BRST)

On Mon, 22 Dec 2003 4:03pm  -0200, Andrew Amorim wrote:

> Boa tarde,
>

        Boa tarde,

> Por favor gostaria de saber como obter a data do arquivo, na seguinte 
> condição:
>
> cat newfiles | grep bin | cut -c 1-13 > lista.txt
>

        PS: Pode fazer sem o cat|grep,
        `grep bin newfiles|cut -c 1-13 > lista.txt'

> Os arquivos que quero obter a data está dentro do lista.txt :
>
> # cat lista.txt
>
> au89dm.tim
> au76nb.tim
> au64ki.tim

        Qual data? Acesso? Modificação? Mudança de atributos?
        Tendo esta lista, tu pode fazer assim,
        ``while do read f; do <pega a data de> $f; done''

        Para `pega a data de' tu escolhe. As versões mais novas do GNU
coreutils têm o `stat', que tu só especifica quais são os atributos do
arquivo que tu quer mostrar (é um wrapper para a [fl]?stat(2)). No teu
script poderia ser assim,

$ stat -c %z /etc/passwd
2003-12-20 19:35:28.000000000 -0200

        Pode usar os outros formatos, %y, %x para as outras datas. E nota
que estes formatos são os mesmos que aqueles usados nos formatadores do
GNU find, é mais ou menos um alias para ``find <arquivo> -printf $1''. Mas
eu também uso um alias há um tempo aqui que é este, parece um `stat':

$ type fstat
fstat is a function
fstat ()
{
    local f;
    f='File: %p (%s)\nInode: %i\tLinks: %n (%F)\nAccess: %a\nModify: 
%t\nChange: %c\n';
    find "$1" -printf "$f"
}

        Fica assim:

$ fstat /etc/passwd
File: /etc/passwd (1382)
Inode: 157565   Links: 1 (rootfs)
Access: Mon Dec 22 21:55:42 2003
Modify: Sat Dec 20 19:35:28 2003
Change: Sat Dec 20 19:35:28 2003

        Mas estas opções _não_ são padrões: Esta opção '-printf' é uma
extensão GNU e aquele `fstat' não está definido. Nos BSDs, por exemplo, o
fstat sempre foi uma ferramenta que foi usada de base para o `lsof', que
provavelmente não vai te ajudar neste caso -- talvez só se fosse o caso de
ver desde quando um determinado arquivo está aberto, por exemplo. Mas de
qualquer forma, a API "fstat" é a mesma para todos os sistemas, e se fosse
o caso de "portabilidade", eu acho que seria uma boa escrever uma pequena
ferramenta para te ajudar na tarefa.

        Mas o `ls' também poderia ser usado para ver a data, ele também
permite escolher qual data vai imprimir. O problema é que tem uma pequena
limitação: Os formatos do `ls' são definidos e sem opção para mudá-los, e
portanto o formato em que a data aparece, nas opções '-l' e '-n', também
já estão definidos: `date "+%b %e %H:%M"' para os arquivos mais recentes
(seis meses) e `date "+%b %e %Y"' para os outros. Infelizmente não existe
um padrão para imprimir a data em formato `longo', por exemplo: os BSDs
usam '-T' para definir as datas longas e o GNU ls usa uma opção longa
'--full-time', e a '-T' está definida como opção para tabulação (que eu
recomendo -T0, BTW :-)).

        Ambos os formatos de data longos usam o padrão 'date' para mostrar
a data, então é possível passar para o date (e '-d'!) e depois converter a
data para o formato que tu quiser. Isto aí, qualquer coisa só falar, e já
poderia enviar mais informações: Sistema, versão do sistema, shell etc.,

-- 
Felipe Kellermann


reply via email to

[Prev in Thread] Current Thread [Next in Thread]