在linux终端中,如何考虑其内容,如何显示文件夹的最后修改日期?

时间:2011-02-14 21:03:31

标签: linux bash shell scripting ubuntu

所以这是交易。假设我有一个名为“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 /目录的最后修改日期报告为此目录中任何文件/目录的最新修改日期,递归。

我该怎么做?

4 个答案:

答案 0 :(得分:50)

类似的东西:

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

说明:

  • find命令会打印每个文件的修改时间,递归地忽略目录(根据IQAndreas的评论,你不能依赖文件夹时间戳)
  • sort -n(数字)-r(反向)
  • head -n 1:获取第一个条目

答案 1 :(得分:19)

如果您的find版本(例如GNU find)支持-printf,则无需重复调用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

如果你不需要递归,那么:

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

答案 2 :(得分:6)

如果可以,我会投票支持保罗的答案。我测试了它并理解了这个概念。我可以确认它有效。 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来解决他的问题?那应该是明确的。

答案 3 :(得分:0)

在我看来,很简单:EXTRA_USERS_PARAMS = "usermod -p 'abc\$1234' root;" 可以完成工作...