[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
- Obter data de arquivo., Andrew Amorim, 2003/12/22
- Re: [shell-script] Obter data de arquivo.,
Felipe Kellermann <=