How to display modified date time with 'find' command?

LinuxCommand LineGrepFindStat

Linux Problem Overview


With a find command, I can display directories names with multiple levels. The following command display all directories under /var path with a depth of 2:

find /var -maxdepth 2 -type d;

The result shows:

/var
/var/log
/var/log/sssd
/var/log/samba
/var/log/audit
/var/log/ConsoleKit
/var/log/gdm
/var/log/sa

With a stat command, I can find the modified date time:

stat /var/log/samba | grep 'Modify:'

The result is:

Modify: 2014-01-02 11:21:27.762346214 -0800 

Is there a way to combine the two commands so that directories will be listed with modified date time?

Linux Solutions


Solution 1 - Linux

The accepted answer works but it's slow. There's no need to exec stat for each directory, find provides the modification date and you can just print it out directly. Here's an equivalent command that's considerably faster:

 find /var -maxdepth 2 -type d -printf "%p %TY-%Tm-%Td %TH:%TM:%TS %Tz\n"

Solution 2 - Linux

You could use the -exec switch for find and define the output format of stat using the -c switch as follows:

find /var -maxdepth 2 -type d -exec stat -c "%n %y" {} \;

This should give the filename followed by its modification time on the same line of the output.

Solution 3 - Linux

Recent GNU versions of find also include a -printf option which includes date fields. If you need to print the file's name and modification time in the standard "C" format, you can use -printf "%c %p\n".

If you want the date in a specific format, you can use the %C followed by a field character. For example, 4-digit year would be %CY, with Y being the character for 4-digit year.
Note that if you need multiple fields, you'll need to specify %C multiple times. For example, YYYY-MM-DD format would look like %CY-%Cm-%Cd.

Check the man pages or online documentation for additional details.

Here is a working example:

find . -name favicon.ico -printf "%c %p\n"

Solution 4 - Linux

find /var -maxdepth 2 -type d | xargs ls -oAHd

This is a way to get your basic ls command to display the full directory path. While ls has the -R parameter for recursive search, paths won't be displayed in the results with the -l or -o option (in OSX, at least), for ex with: ls -lR.

Solution 5 - Linux

Another one that I use to print modified files in last day . ls -ltr gives me more detailed like modification time , user etc

find <my_dir> -mtime -1 -type f -print | xargs ls -ltr 

Solution 6 - Linux

try this line:

find /var -maxdepth 2 -type d|xargs stat|grep -E 'File|Modi'

here I ran it, it outputs:

....
  File: ‘/var/cache/cups’
Modify: 2013-12-24 00:42:59.808906421 +0100
  File: ‘/var/log’
Modify: 2014-01-01 12:41:50.622172106 +0100
  File: ‘/var/log/old’
Modify: 2013-05-31 20:40:23.000000000 +0200
  File: ‘/var/log/journal’
Modify: 2013-12-15 18:56:58.319351603 +0100
  File: ‘/var/log/speech-dispatcher’
Modify: 2013-10-27 01:00:08.000000000 +0200
  File: ‘/var/log/cups’
Modify: 2013-12-22 00:49:52.888346088 +0100
  File: ‘/var/opt’
Modify: 2013-05-31 20:40:23.000000000 +0200
....

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionPurresView Question on Stackoverflow
Solution 1 - LinuxkzarView Answer on Stackoverflow
Solution 2 - Linuxrc0rView Answer on Stackoverflow
Solution 3 - LinuxMr. LlamaView Answer on Stackoverflow
Solution 4 - LinuxMarkView Answer on Stackoverflow
Solution 5 - Linuxuser666View Answer on Stackoverflow
Solution 6 - LinuxKentView Answer on Stackoverflow