在linuxterminal中,如何显示文件夹的最后修改date,并考虑其内容?

所以这是交易。 假设我有一个名为“web”的目录

$ ls -la drwx------ 4 rimmer rimmer 4096 2010-11-18 06:02 web 

但是在这个目录下,web / php /

 $ ls -la -rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php 

这意味着即使我的目录/web/php/index.php的内容最后在2011-01-05修改了,/ web /目录本身也被报告为上次修改时间为2010-11-18。

我需要做的是将我的/ web /目录的最后修改date作为该目录内任何文件/目录的最新修改daterecursion报告。

我怎么去做这个?

就像是:

 find /path/ -exec stat \{} --printf="%y\n" \; | sort -n -r | head -n 1 

说明:

  • find命令会recursion地为每个文件打印修改时间
  • sort -n(数字)-r(反向)
  • head -n 1:获得第一个条目

如果你有一个支持-printffind (比如GNU find )版本,那么就不需要重复调​​用stat

 find /some/dir -printf "%T+\n" | sort -nr | head -n 1 

要么

 find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1 

但是,如果你不需要recursion,

 stat --printf="%y\n" * 

如果可以的话,我会投赞成票的。 我testing了它并理解了这个概念。 我可以证实它的作品。 find命令可以输出很多参数。 例如,将以下内容添加到--printf子句中:

 %a for attributes in the octal format %n for the file name including a complete path 

例:

 find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1 2011-02-14 22:57:39.000000000 +0100 Desktop/new file 

我还要提出这个问题:这个问题的作者是否想用Bash或PHP解决他的问题? 这应该被指定。