Como exibir o tempo modificado de um arquivo?

21

Gostaria que um método localizasse e imprimisse a hora modificada de um arquivo, para uso em um script bash.

Eu inventei:

ls -l $filename | cut -d ' ' -f '6-8'

Quais resultados:

Jul 26 15:05

Embora eu queira evitar a análise de ls , também seria útil ter o ano lá.

Idealmente, gostaria de ver uma saída semelhante à saída padrão do comando date .

Tue Jul 26 15:20:59 BST 2016

Quais outros métodos úteis estão disponíveis?

    
por Arronical 26.07.2016 / 16:23

2 respostas

30

Não use ls , isso é uma tarefa para stat :

stat -c '%y' filename

-c nos permite obter resultados específicos, aqui %y nos dará o horário da última modificação do arquivo em formato legível por humanos. Para obter tempo em segundos desde que o Epoch use %Y :

stat -c '%Y' filename

Se você quiser também o nome do arquivo, use %n :

stat -c '%y : %n' filename
stat -c '%Y : %n' filename

Defina os especificadores de formato para atender sua necessidade. Verifique man stat .

Exemplo:

% stat -c '%y' foobar.txt
2016-07-26 12:15:16.897284828 +0600

% stat -c '%Y' foobar.txt
1469513716

% stat -c '%y : %n' foobar.txt
2016-07-26 12:15:16.897284828 +0600 : foobar.txt    

% stat -c '%Y : %n' foobar.txt
1469513716 : foobar.txt

Se você quiser a saída como Tue Jul 26 15:20:59 BST 2016 , use o tempo da epoch como entrada para date :

% date -d "@$(stat -c '%Y' a.out)" '+%a %b %d %T %Z %Y'
Tue Jul 26 12:15:21 BDT 2016

% date -d "@$(stat -c '%Y' a.out)" '+%c'               
Tue 26 Jul 2016 12:15:21 PM BDT

% date -d "@$(stat -c '%Y' a.out)"
Tue Jul 26 12:15:21 BDT 2016

Verifique os especificadores de formato de date para atender sua necessidade. Veja man date também.

    
por heemayl 26.07.2016 / 16:25
1

Eu tentei

ls -l $filename | cut -d ' ' -f '6-8'

mas se a data for menor que 10, perderá o tempo. Isso por causa do espaço extra antes da data, se menor que 10. Tente isto:

filename="test.txt"
ls -l $filename | awk -F ' ' '{print " "" "}'

O comando awk imprime os campos separados por todos os espaços (-F ''). Espero que funcione. Eu sei que isso não responde à pergunta original, mas apenas um esclarecimento sobre o comando ls apenas para data e hora. Quando você usa o Google "ubuntu get date e time of file" ele lista essa questão no topo, que é o que eu estava procurando, já que eu não preciso do ano também. Por ano, data e hora, você pode tentar um dos comandos abaixo. % m imprime o número do mês. % b imprime abreviação do mês: Solte o% H:% M se você não precisar da hora e do minuto. % -d não imprime o zero inicial para o dia do mês.

date -r $filename +"%Y %m %-d %H:%M"
date -r $filename +"%y %m %-d %H:%M"
date -r $filename +"%Y %b %-d %H:%M"
date -r $filename +"%y %b %-d %H:%M"
    
por te7 01.11.2017 / 12:00