如何递归查找并列出包含子目录的目录中最新修改的文件和时间?

558
  • 操作系统:Linux

  • 文件系统类型:ext3

  • 首选解决方案:Bash(脚本/一行命令)、Ruby或Python

我有多个目录,每个目录下都有多个子目录和文件。我需要生成一个列表,列出所有这些目录,并按照构建方式列出每个一级目录的日期和时间,以及该目录中最新创建/修改的文件的日期和时间。

为了澄清,如果我在几个子目录层次下触摸文件或修改其内容,则该时间戳应显示在一级目录名称旁边。假设我有一个结构如下所示的目录:

./alfa/beta/gamma/example.txt

当我修改文件example.txt的内容时,我需要在一级目录alfa旁边以人类可读的形式显示时间,而不是epoch。我尝试过使用find、xargssort等方法,但无法解决的问题是当我在几个层次下创建/修改文件时,'alfa'的文件系统时间戳并不会改变。


1
如果您能够承受建立它的痛苦,https://github.com/shadkam/recentmost 可以被使用。 - user3392225
我只看到了大量的东西,而不是像 -R 开关这样的解决方案。 - neverMind9
1
@user3392225 GitHub / shadkam / recentmost 的分支可以在 https://github.com/ConradHughes/recentmost 找到,使用 -0 选项与 find-print0 配合使用。 - Setaa
22个回答

0

你可以尝试使用printf函数来查找ACTION

%Ak 文件的最后访问时间,格式由k指定, k可以是@'或C语言strftime函数的指令。 下面列出了k的可能值;由于不同系统之间的`strftime`差异, 其中一些可能在某些系统上不可用。

请参阅@anubhava's answer以获取详细信息


“command”:难道没有更正式的名称吗?是“行动”还是“谓词”? - Peter Mortensen

0

在 Mac 上我使用这个

find . -type f -exec stat -f "%m %N" "{}" \; | sort -nr | perl -n -e '@a = split / /;print `ls -l $a[1]`' | vim -

如果你想过滤一些文件,可以使用带有正则表达式的grep命令,例如:

find . -type f -exec stat -f "%m %N" "{}" \; | sort -nr | grep -v -E \.class$ | perl -n -e '@a = split / /;print `ls -l $a[1]`' | vim -

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接