如何用'find'命令显示修改日期时间?

时间:2014-01-02 22:21:11

标签: linux command-line grep find stat

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

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命令,我可以找到修改的日期时间:

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

结果是:

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

有没有办法合并这两个命令,以便列出目录的修改日期时间?

6 个答案:

答案 0 :(得分:101)

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

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

答案 1 :(得分:52)

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

-c

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

答案 2 :(得分:13)

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

这是一种让您的基本ls命令显示完整目录路径的方法。虽然ls具有递归搜索的-R参数,但路径不会显示在-l-o选项的结果中(至少在OSX中),前者:ls -lR

答案 3 :(得分:4)

我用于在去年打印修改过的文件的另一个。 ls -ltr给了我更详细的修改时间,用户等

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

答案 4 :(得分:3)

Head的最新GNU版本还包括一个find选项,其中包括日期字段。如果您需要以标准的“ C”格式打印文件名和修改时间,则可以使用-printf

如果希望日期采用特定格式,则可以使用-printf "%c %p\n",后跟一个字段字符。例如,四位数的年份将是%C,而%CY是四位数的年份的字符。
请注意,如果您需要多个字段,则需要多次指定Y。例如,YYYY-MM-DD格式看起来像%C

检查手册页或online documentation了解更多详细信息。

这是一个有效的示例:

%CY-%Cm-%Cd

答案 5 :(得分:1)

试试这一行:

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