如何使用'find'命令显示修改的date时间?

使用find命令,我可以显示具有多个级别的目录名称。 以下命令显示深度为2的/varpath下的所有目录:

 find /var -maxdepth 2 -type d; 

结果显示:

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

使用stat命令,我可以find修改的date时间:

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

结果是:

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

有没有办法把这两个命令结合起来,这样目录就会被修改date时间?

您可以使用-exec开关find并使用-c开关定义stat的输出格式,如下所示:

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

这应该在输出的同一行上给出文件名后面的修改时间。

被接受的答案有效,但速度很慢。 没有必要为每个目录执行统计,find提供修改date,你可以直接打印出来。 这是一个相当快的等价命令:

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

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

这是获取基本ls命令以显示完整目录path的一种方法。 虽然ls具有recursionsearch的-R参数,但path将不会显示在带-l-o选项(至less在OSX中)的结果中,ex则使用: ls -lR

试试这一行:

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

在这里我跑了它,输出:

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

另一个我用来在最后一天打印修改后的文件。 ls -ltr给我更详细的修改时间,用户等等

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