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

这样吧,假设我有一个名为“ 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/目录的最后修改日期报告为该目录中任何文件/目录的最新修改日期。

我该怎么做呢?

127507 次浏览

比如:

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

说明:

  • Find 命令将为每个文件打印修改时间,递归忽略目录(根据 IQAndreas 的注释,您不能依赖于文件夹时间戳)
  • Sort-n (数值)-r (反向)
  • 拿到第一个条目

如果可以的话,我会投保罗的票。我测试了一下,理解了这个概念。我可以确定它是有效的。 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 来解决他的问题。

如果您有一个支持 -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

但是,如果不需要递归:

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

在我看来,这很简单: ls -lt mydirectory做的工作..。