在 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 1
或sed 1q
而不是过时的语法。
所以head -1
只返回第一行现在已经过时了......伙计,我记得它曾经是新标志 - 我那么老了! :o)
这是一个很好的例子,说明了 linux 命令行的优缺点。
在大多数情况下,我会添加-type f
标志,因此它只检查文件的修改时间。我不记得我使用的是哪个程序,但是当我将文件从一个位置复制到另一个位置时,它会保留文件的时间戳,但会将目录标记为全新的,从而忽略结果。
多么友好的操作系统【参考方案2】:
如果您有支持-printf
的find
版本(例如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 解决这个问题,是的。它用于备份服务器文件。我认为现在问题已经解决了,解决方案完美:) 你似乎在使用bothstat
和find
的内置-printf
标志,然后基本上扔掉其中一个结果。我猜你应该更喜欢后者而不是前者,如单独的答案中所述(当find
已经在一个进程中完成所有操作时,无需为每个文件生成单独的进程)。【参考方案4】:
在我看来,这很简单:ls -lt mydirectory
完成了这项工作......
【讨论】:
它没有,但很容易想到。目录上的ls -t
(或--time
选项)将显示该目录的创建时间,但不会反映该目录中文件的最后修改时间。
`ls -lt mydirectory' 向我显示该目录中文件和子目录的最后修改时间...
这仅适用于 mydirectory 中的文件,不适用于 mydirectory 中任何子目录中的文件。请参阅this 讨论。以上是关于在 linux 终端中,如何显示文件夹的最后修改日期,并考虑其内容?的主要内容,如果未能解决你的问题,请参考以下文章
Linux下,如何将最后修改时间在某个时间之前的文件删除掉?