Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在linux终端中,如何显示文件夹';s的最后修改日期,考虑到其内容?_Linux_Bash_Shell_Scripting_Ubuntu - Fatal编程技术网

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

在linux终端中,如何显示文件夹';s的最后修改日期,考虑到其内容?,linux,bash,shell,scripting,ubuntu,Linux,Bash,Shell,Scripting,Ubuntu,这就是交易。假设我有一个名为“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/目录的上次修改日期报告为该目录中任何文件/目录的最新修改日期 我该怎么做呢

这就是交易。假设我有一个名为“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/目录的上次修改日期报告为该目录中任何文件/目录的最新修改日期

我该怎么做呢?

类似于:

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

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

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

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

      find /some/dir -printf "%T+\n" | sort -nr | head -n 1
      

      但是,如果不需要递归,请执行以下操作:

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

      在我看来,这很简单:
      ls-lt mydirectory
      起作用了……

      好问题,我认为这是显而易见的,就像我的标签上写的“bash,scripting,shell”。我想用Bash解决这个问题,是的。它用于备份服务器文件。我认为问题现在已经解决了,解决方案非常有效:)您似乎同时使用了
      stat
      find
      的内置
      -printf
      标志,然后基本上放弃了其中一个结果。我想你应该更喜欢后者而不是前者,正如在一个单独的答案中所概述的那样(如果
      find
      已经在一个过程中完成了所有工作,那么就不需要为每个文件生成单独的过程),你可以考虑<代码>头-N 1 或<代码> SED1Q而不是过时的语法。所以<代码>头- 1 /代码>返回刚才的第一行现在已经过时了…老兄,我还记得以前是新国旗的时候——我已经老了!!!:o) 这是linux命令行的优点和缺点的一个很好的例子。在大多数情况下,我会添加
      -typef
      标志,因此它只检查文件的修改时间。我记不起我用的是哪个程序,但当我把文件从一个位置复制到另一个位置时,它保留了文件的时间戳,但将目录标记为全新的,结果就不一样了。它没有,但很容易想到这一点<目录上的code>ls-t(或
      --time
      选项)将显示该目录创建的时间,但它不会反映该目录中文件的上次修改时间。`ls-lt mydirectory'向我显示该目录中文件和子目录的上次修改时间。。。
      find /some/dir -printf "%TY-%Tm-%Td %TT\n" | sort -nr | head -n 1
      
      stat --printf="%y\n" *