2014-04-03 12:45:56 +0000 2014-04-03 12:45:56 +0000
166
166

Obter a última data modificada do ficheiro em Linux

Sou novo no Linux. Estou a utilizar a linha de comandos. Estou a tentar ver a data da última modificação de um ficheiro. Como faço isso no Linux a partir da Linha de Comando?

Respostas (7)

147
147
147
2015-09-21 10:22:09 +0000

Como mencionado por @edvinas.me, stat diz-lhe várias informações sobre o ficheiro incluindo a data da última modificação.

No início, confundi-me com Modify e Change, apenas para esclarecer, stat listas de saída:

  • Acesso mostra a hora do último acesso aos dados (e. g. read).
  • Modify mostra a hora da última modificação dos dados.
  • Change mostra a hora da última modificação do estado do ficheiro.

Por exemplo:

~ $ touch foo
~ $ stat foo
File: ‘foo’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: fc01h/64513d Inode: 410397 Links: 1
Access: (0644/-rw-r--r--) Uid: (80972/ etomort) Gid: (18429/ eem_tw)
Access: 2015-09-21 12:06:11.343616258 +0200
Modify: 2015-09-21 12:06:11.343616258 +0200
Change: 2015-09-21 12:06:11.343616258 +0200
Birth: -

~ $ echo "Added bar to foo file" >> foo
~ $ stat foo
File: ‘foo’
Size: 42 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 410654 Links: 1
Access: (0644/-rw-r--r--) Uid: (80972/ etomort) Gid: (18429/ eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:09:31.302713093 +0200
Birth: -

~ $ chmod 444 foo
~ $ stat foo
File: ‘foo’
Size: 42 Blocks: 8 IO Block: 4096 regular file
Device: fc01h/64513d Inode: 410654 Links: 1
Access: (0444/-r--r--r--) Uid: (80972/ etomort) Gid: (18429/ eem_tw)
Access: 2015-09-21 12:09:31.298712951 +0200
Modify: 2015-09-21 12:09:31.298712951 +0200
Change: 2015-09-21 12:10:16.040310543 +0200
Birth: -
69
69
69
2014-04-03 12:47:41 +0000

Utilizar o comando stat para isso:

$ stat file
40
40
40
2017-08-31 01:04:43 +0000

Outra forma mais flexível é a utilização do date -r. De man date:

-r, --reference=FILE
       display the last modification time of FILE

Isto tem a vantagem de lhe permitir especificar o formato de saída, por exemplo,

$ date -r foo
Thu Aug 31 10:36:28 AEST 2017
$ date -r foo -R
Thu, 31 Aug 2017 10:36:28 +1000
$ date -r foo -u
Thu Aug 31 00:36:28 UTC 2017
$ date -r foo +%s
1504139788
17
17
17
2015-11-16 05:43:54 +0000

ls -l devem fazer o trabalho.

Exemplo:

#> ls -l /home/TEST/
total 16

-rw-r--r-- 1 rfmas1 nms 949 Nov 16 12:21 create_nd_lists.py

-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 enb_list

-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 nb_list

-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 nodes_ip.txt

-rw-r--r-- 1 rfmas1 nms 0 Nov 16 12:35 rnc_list
3
3
3
2019-08-14 16:24:39 +0000

Construindo fora de @Adam Taylor’s comment in @phoops’s answer e @Sparhawk’s answer.

Para especificamente just obter a data (usando 3 de Outubro de 2019 para exemplos porque era o meu último aniversário, aqui está o meu venmo se você se sente levado a me abençoar financeiramente: @levi_uzodike)

  • stat -c %y file | cut -d' ' -f1 irá dar-lhe 2019-10-03
  • date +%F -r file irá também dar-lhe 2019-10-03
  • date +%D -r file irá dar-lhe 10/03/19
  • date +%x -r file irá provavelmente dar-lhe 10/03/2019, ou 10/03/19 se estiver nos EUA e ou 03/10/2019, ou 03/10/19 se estiver no Reino Unido, apenas para citar alguns exemplos (claro que há mais possibilidades)

Estas opções de formato date são, ao meu entendimento, combinações de outras opções de formato. Aqui estão algumas explicações da página man :

%b nome abreviado do mês do locale (por exemplo, Jan) %B nome completo do mês do locale (por exemplo, Janeiro) … %d dia do mês (por exemplo, 01) %D data; o mesmo que %m/%d/%y %e dia do mês, espaço almofadado; o mesmo que %_d %F data completa; o mesmo que %Y-%m-%d … %m mês (01..12) … %x representação da data do locale (por exemplo, 12/31/99) … %y últimos dois dígitos do ano (00..99) %Y ano … Por defeito, campos numéricos de datas com zeros.
As seguintes bandeiras opcionais podem seguir `%‘:

  • (hyphen) do not pad the field
    _ (underscore) pad with spaces
    0 (zero) pad with zeros
    ^ use upper case if possible
    # use opposite case if possible

N.B.: These flags don’t work on the “combo formats” like %F, %D and %x. They are for the “singular field formats”.

Apparently this last flag ( # ) does not work as I’d expect (e.g., if date +%b gives Oct, date +%#b gives OCT as opposed to oCT) I guess this would be useless, but I’d think a lower case option would be more useful. date +%#pdoes turn date +%#p which might give PM or AM into pm or am, respectively. So I guess it’s not a 'per-character’ case switch but sets the case of all the characters in the string to the opposite case of the majority of the characters? Also date +%#P gives pm or am, but neither date +%^P nor date +%#P change its output. My guess for this case is that date +%#P is just an alias for %P, and it seems that whenever you add more than one flag, the behavior is undefined/unpredictable ( e.g., %#p gives the same as date +%0- e: date +%-e and 3 gives the same as date +%-0e: date +%0e, which makes you think that only the flag next to the letter works or that it goes left to right, but both 03 and date +%#^p give date +%^#p or pm, [depending on the time of course] ) unless there’s some hidden order of operations? Sorry for digressing…

Also, if you run the command am, you can see the combo for the specific locale of your system (e.g., locale -k LC_TIME | grep ^d_fmt).

And you can make your own combo. For example,

  • d_fmt="%m/%d/%Y" will give you date +%^b\ %-e\ %Y -r file&007OCT 3 2019
2
2
2
2017-01-06 10:08:23 +0000

Se o ficheiro está noutro servidor web, gosto de httpie docs ).

Instalação

pip install httpie --user

Utilização

O comando -h dá apenas o cabeçalho. O padrão é

http -h [url] | grep 'Last-Modified\|Date'

Exemplo:

$ http -h https://martin-thoma.com/author/martin-thoma/ | grep 'Last-Modified\|Date'
Date: Fri, 06 Jan 2017 10:06:43 GMT
Last-Modified: Fri, 06 Jan 2017 07:42:34 GMT

O Date é importante porque reporta a hora do servidor e não a sua hora local. Além disso, nem todos os servidores enviam Last-Modified (por exemplo, o super-utilizador parece não o fazer).

2
2
2
2018-11-14 04:22:35 +0000

1) Listar ficheiros com a Data/Hora da Última Modificação

Para listar ficheiros e mostrar os últimos ficheiros modificados no topo, vamos usar as opções -lt com o comando ls.

$ ls -lt /run
output
total 24
-rw-rw-r--. 1 root utmp 2304 Sep 8 14:58 utmp
-rw-r--r--. 1 root root 4 Sep 8 12:41 dhclient-eth0.pid
drwxr-xr-x. 4 root root 100 Sep 8 03:31 lock
drwxr-xr-x. 3 root root 60 Sep 7 23:11 user
drwxr-xr-x. 7 root root 160 Aug 26 14:59 udev
drwxr-xr-x. 2 root root 60 Aug 21 13:18 tuned

https://linoxide.com/linux-how-to/how-sort-files-date-using-ls-command-linux/