I'm new to Linux. I'm using the command-line. I'm trying to view the last modified date of a file. How do I do that in Linux from the Command Line?
As mentioned by @edvinas.me,
stat tells you various information about the file including the last modified date.
At first, I was confused with Modify and Change, just to clarify,
stat output lists:
- Access shows the time of last data access (e.g. read).
- Modify shows the time of last data modification.
- Change shows the time the file status last changed.
~ $ 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: -
Another way that is more flexible is using
date -r. From
-r, --reference=FILE display the last modification time of FILE
This has the advantage of allowing you to specify the output format, e.g.
$ 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
ls -l should do the work.
#> 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
Building off of @Adam Taylor 's comment in @phoops 's answer and @Sparhawk 's answer.
To specifically just get the date (using October 3, 2019 for examples because it was my last birthday, here's my venmo if you feel led to bless me financially: @levi_uzodike)
stat -c %y file | cut -d' ' -f1will give you
date +%F -r filewill also give you
date +%D -r filewill give you
date +%x -r filewill probably give either
10/03/19if you're in the U.S. and either
03/10/19if you're in the U.K., just to name a couple examples (of course there are more possibilities)
date format options are, to my understanding, combinations of other format options. Here are some explanations from the man page:
%b locale's abbreviated month name (e.g., Jan)
%B locale's full month name (e.g., January)
%d day of month (e.g, 01)
%D date; same as %m/%d/%y
%e day of month, space padded; same as %_d
%F full date; same as %Y-%m-%d
%m month (01..12)
%x locale's date representation (e.g., 12/31/99)
%y last two digits of year (00..99)
By default, date pads numeric fields with zeroes.
The following optional flags may follow `%':
- (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
%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
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
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
am, but neither
date +%^P nor
date +%#P change its output. My guess for this case is that
%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.,
date +%0-e gives the same as
date +%-0e gives the same as
03, which makes you think that only the flag next to the letter works or that it goes left to right, but both
date +%#^p and
date +%^#p give
am, [depending on the time of course] ) unless there's some hidden order of operations? Sorry for digressing...
Also, if you run the command
locale -k LC_TIME | grep ^d_fmt, you can see the combo for the specific locale of your system (e.g.,
And you can make your own combo. For example,
date +%^b\ %-e\ %Y -r filewill give you
OCT 3 2019
1) List Files directory with Last Modified Date/Time
To list files and shows the last modified files at top, we will use
$ 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
pip install httpie --user
-h command gives only the header. The pattern is
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
Date is important as this reports the server time, not your local time. Also, not every server sends
Last-Modified (e.g. superuser seems not to do it).