如何递归列出特定目录中最后修改的文件

Tib*_* C. 7 command-line files search productivity

这可能是一个通用的 Linux 问题,但我会在这里试一试。

我经常需要一个最近修改过的文件列表,目前我正在通过管道ls输出到grep今天或某个小时的grep参数,但我需要经常更改参数以获取更新的列表,这有点效率低下。

是否有一个简单的命令来列出某个路径上最后修改的文件?

hee*_*ayl 13

要递归地从某个目录中查找最后 5 个修改过的文件,请从该目录运行:

find . -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
Run Code Online (Sandbox Code Playgroud)
  • %T@带有-printf谓词 offind将获得自纪元以来文件的修改时间,%p将打印文件名

  • sort -k1,1nrsort根据纪元时间在数字上反转结果

  • head -5 会给我们最后修改的五个文件名

如果您只想在当前目录中搜索(而不是递归),请使用stat

stat -c '%Y %n' * | sort -k1,1nr | head -5
Run Code Online (Sandbox Code Playgroud)

或者find

find . -maxdepth 1 -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
Run Code Online (Sandbox Code Playgroud)

检查man findman stat获得更多想法。


小智 8

其实很简单。要获取 currant 目录中的最新文件:

ls -Art | tail -n 2

要获取另一个目录中的最新文件,例如 /opt/spark/ 中:

ls /opt/spark/ -Art | tail -n 1

这是我在集群上使用它时的情况:

aa23916@picard03:/opt/spark/applicationHistory$ ls -Art | tail -n 2
app-20180124162809-0004
app-20180124163207-0005.inprogress
Run Code Online (Sandbox Code Playgroud)

简单又容易:)


Jac*_*ijm 6

下面的脚本递归地列出了目录中的所有文件,这些文件是在比任意时间更早编辑的。此外,它还显示自上次编辑以来的时间跨度。

它可以与以下命令一起使用:

findrecent <directory> <time(in hours)>
Run Code Online (Sandbox Code Playgroud)

如下所示:

在此输入图像描述

在此示例中,列出了桌面上 36 小时内编辑的所有文件。

剧本

findrecent <directory> <time(in hours)>
Run Code Online (Sandbox Code Playgroud)

如何使用

  1. 创建该目录(如果尚不存在)~/bin
  2. 将上面的脚本复制到一个空文件中,另存findrecent~/bin
  3. 使脚本可执行
  4. 注销并重新登录即可完成

笔记

  • 如果没有给出时间,脚本会列出过去一小时内编辑的所有文件
  • 如果目录包含空格,请使用引号,如示例中所示

  • 当已经存在如此多的工具可以轻松地通过管道连接在一起来完成此操作时,这确实看起来有点矫枉过正(重新发明轮子)。(正如希梅尔所描述的那样。) (2认同)