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

Posted

技术标签:

【中文标题】在 linux 终端中,如何显示文件夹的最后修改日期,并考虑其内容?【英文标题】:in linux terminal, how do I show the folder's last modification date, taking its content into consideration? 【发布时间】:2011-06-27 04:52:22 【问题描述】:

所以这就是交易。假设我有一个名为“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 年 1 月 5 日,但 /web/ 目录本身会报告为最后一次修改时间是 2010 年 11 月 18 日.

我需要做的是将我的 /web/ 目录的最后修改日期报告为该目录中任何文件/目录的最新修改日期,递归。

我该怎么做?

【问题讨论】:

【参考方案1】:

类似:

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

解释:

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

【讨论】:

根据the coreutils documentation,您可能会考虑使用head -n 1sed 1q 而不是过时的语法。 所以head -1 只返回第一行现在已经过时了......伙计,我记得它曾经是新标志 - 我那么老了! :o) 这是一个很好的例子,说明了 linux 命令行的优缺点。 在大多数情况下,我会添加-type f 标志,因此它只检查文件的修改时间。我不记得我使用的是哪个程序,但是当我将文件从一个位置复制到另一个位置时,它会保留文件的时间戳,但会将目录标记为全新的,从而忽略结果。 多么友好的操作系统【参考方案2】:

如果您有支持-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" *

【讨论】:

【参考方案3】:

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

【讨论】:

好问题,但我认为这很明显,因为我的标签说“bash,脚本,shell”。我想用 Bash 解决这个问题,是的。它用于备份服务器文件。我认为现在问题已经解决了,解决方案完美:) 你似乎在使用both statfind 的内置-printf 标志,然后基本上扔掉其中一个结果。我猜你应该更喜欢后者而不是前者,如单独的答案中所述(当find 已经在一个进程中完成所有操作时,无需为每个文件生成单独的进程)。【参考方案4】:

在我看来,这很简单:ls -lt mydirectory 完成了这项工作......

【讨论】:

它没有,但很容易想到。目录上的ls -t(或--time 选项)将显示该目录的创建时间,但不会反映该目录中文件的最后修改时间。 `ls -lt mydirectory' 向我显示该目录中文件和子目录的最后修改时间... 这仅适用于 mydirectory 中的文件,不适用于 mydirectory 中任何子目录中的文件。请参阅this 讨论。

以上是关于在 linux 终端中,如何显示文件夹的最后修改日期,并考虑其内容?的主要内容,如果未能解决你的问题,请参考以下文章

linux 中如何修改文件内容?

Linux下,如何将最后修改时间在某个时间之前的文件删除掉?

linux查看文件的后几行(文件查看 如何显示最后几行 ,某几行)

如何让 cygwin终端中显示的中文改成英文

如何获取文件最后在 Python 中修改的时间? [复制]

如何修改或美化linux终端