linux 在终端修改文件夹,在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年1月5日,/web /目录本身也被报告为最后一次修改时间为2010年11月18日。

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

我该怎么做呢?

最佳解决思路

就像是:

find /path/ -type f -exec stat \{} –printf=”%y\n” \; |

sort -n -r |

head -n 1

说明:

find命令将为每个文件递归地忽略目录打印修改时间(根据IQAndreas的评论,您不能依赖文件夹时间戳)

排序-n(按数字)-r(反向)

头-n 1:获取第一个条目

次佳解决思路

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

第三种解决思路

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

参考资料

    原文作者:那些年灬的羁绊
    原文地址: https://blog.csdn.net/weixin_36276256/article/details/116694299
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞