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

Ottieni l'ultima data modificata del file in Linux

Sono nuovo su Linux. Sto usando la riga di comando. Sto cercando di visualizzare l'ultima data modificata di un file. Come faccio a farlo in Linux dalla riga di comando?

Risposte (7)

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

Come menzionato da @edvinas.me, stat fornisce varie informazioni sul file, compresa l'ultima data modificata.

All'inizio ero confuso con Modify e Change, tanto per chiarire, stat mostra l'ora dell'ultimo accesso ai dati (e. - Modifica mostra l'ora dell'ultima modifica dei dati. - Cambia mostra l'ora dell'ultima modifica dello stato del file.

Per esempio:

~ $ 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

Utilizzare il comando stat per questo:

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

Un altro modo più flessibile è l'utilizzo di date -r. Da man date:

-r, --reference=FILE
       display the last modification time of FILE
``` ```
$ 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

Questo ha il vantaggio di consentire di specificare il formato di uscita, ad esempio

&001

17
17
17
2015-11-16 05:43:54 +0000

ls -l dovrebbe fare il lavoro.

Esempio:

#> 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

Per ottenere in particolare la data (usando il 3 ottobre 2019 per esempio perché era il mio ultimo compleanno, ecco il mio venmo se vi sentite indotti a benedirmi finanziariamente: @levi_uzodike)

  • stat -c %y file | cut -d' ' -f1 vi darà 2019-10-03
  • date +%F -r file vi darà anche 2019-10-03
  • date +%D -r file vi darà 10/03/19
  • date +%x -r file vi darà 10/03/2019
  • 10/03/19 vi darà probabilmente 03/10/2019, o 03/10/19 se siete negli Stati Uniti e date, o `%‘: > > - (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 ` se siete nel Regno Unito, solo per citare un paio di esempi (naturalmente ci sono più possibilità)

Queste opzioni di formato , sono, per quanto ne so, combinazioni di altre opzioni di formato. Ecco alcune spiegazioni dalla man page :

%b nome del mese abbreviato del locale (ad esempio, Jan) %B nome del mese completo del locale (ad esempio, Gennaio) … %d giorno del mese (es. 01) %D data; come %m/%d/%y %e giorno del mese, spazio imbottito; come %d %F data completa; come %Y-%m-%d … %m mese (01..12) … … %x rappresentazione della data del locale (es, 12/31/99) … %y ultime due cifre dell'anno (00..99) %Y anno … %Y anno … Per impostazione predefinita, i campi numerici dei datari con gli zeri.
Possono seguire i seguenti flag opzionali and%F`. They are for the “
singular field formats_”.

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

Also, if you run the command date +%#^p, you can see the combo for the specific locale of your system (e.g., date +%^#p).

And you can make your own combo. For example,

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

Se il file è su un altro webserver, mi piace httpie docs ).

Installazione

pip install httpie --user

Uso

Il comando -h dà solo l'intestazione. Il modello è

http -h [url] | grep 'Last-Modified\|Date'
``` ```
$ 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

Esempio:

&001

Il comando Date è importante in quanto riporta l'ora del server, non l'ora locale. Inoltre, non tutti i server inviano Last-Modified (ad esempio, il superutente sembra non farlo).

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

1) Elencare la directory dei file con Data e ora dell'ultima modifica

Per elencare i file e mostrare gli ultimi file modificati in alto, useremo le opzioni -lt con il 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/