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

Ric*_*uez 60 linux bash shell scripting ubuntu

所以这是交易.假设我有一个名为"web"的目录,所以

$ ls -la

drwx------  4 rimmer rimmer 4096 2010-11-18 06:02 web
Run Code Online (Sandbox Code Playgroud)

但是在这个目录里面,web/php /

$ ls -la

-rw-r--r-- 1 rimmer rimmer 1957 2011-01-05 08:44 index.php
Run Code Online (Sandbox Code Playgroud)

这意味着即使我的目录/web/php/index.php的内容在2011-01-05上次修改,/ web /目录本身也会在2010-11-18报告为最后修改.

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

我该怎么做呢?

Pau*_*ine 50

就像是:

find /path/ -type f -exec stat \{} --printf="%y\n" \; | 
     sort -n -r | 
     head -n 1
Run Code Online (Sandbox Code Playgroud)

说明:

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

  • 所以只返回第一行的“head -1”现在已经过时了......伙计,我记得它曾经是新标志 - 我就这么老了!:o) (2认同)

Pau*_*ce. 20

如果您有支持的版本find(如GNU find),-printf则无需stat重复调用:

find /some/dir -printf "%T+\n" | sort -nr | head -n 1
Run Code Online (Sandbox Code Playgroud)

要么

find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1
Run Code Online (Sandbox Code Playgroud)

但是,如果您不需要递归,则:

stat --printf="%y\n" *
Run Code Online (Sandbox Code Playgroud)


小智 6

如果可以,我会投票支持保罗的答案.我测试了它并理解了这个概念.我可以确认它有效.该find命令可以输出许多参数.例如,将以下内容添加到--printf子句中:

%a for attributes in the octal format
%n for the file name including a complete path
Run Code Online (Sandbox Code Playgroud)

例:

find Desktop/ -exec stat \{} --printf="%y %n\n" \; | sort -n -r | head -1
2011-02-14 22:57:39.000000000 +0100 Desktop/new file
Run Code Online (Sandbox Code Playgroud)

让我提出这个问题:这个问题的作者是否想用Bash或PHP来解决他的问题?应该指明.

  • 好问题,我认为这很明显,因为我的标签说"bash,scripting,shell".我想用Bash解决这个问题,是的.它用于备份服务器文件.我认为问题现在解决了,解决方案工作完美:) (3认同)