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

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

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

我经常需要最近修改的文件列表,目前,我使用今天或某个小时的参数将输出ls传输到管道,但我需要频繁更改参数以获取更新的列表,这有点没有效率。grepgrep

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

答案1

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

find . -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5
  • %T@使用-printf谓词find将获取文件自纪元以来的修改时间,%p将打印文件名

  • sort -k1,1nrsort根据纪元时间对结果进行数字反转

  • head -5将获得最后修改的五个文件名

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

stat -c '%Y %n' * | sort -k1,1nr | head -5

或者find

find . -maxdepth 1 -type f -printf '%T@ %p\n' | sort -k1,1nr | head -5

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

答案2

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

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

簡單又容易:)

答案3

下面的脚本递归列出目录中所有在任意时间之前编辑的文件。此外,它还显示自上次编辑以来的时间跨度。

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

findrecent <directory> <time(in hours)>

如下所示:

在此处输入图片描述

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

剧本

#!/usr/bin/env python3
import os
import time
import sys

directory = sys.argv[1]

try:
    t = int(sys.argv[2])
except IndexError:
    t = 1

currtime = time.time(); t = t*3600

def calc_time(minutes):
    # create neatly displayed time
    if minutes < 60:
        return "[edited "+str(minutes)+" minutes ago]"
    else:
        hrs = int(minutes/60); minutes = int(minutes - hrs*60)
        return "[edited "+str(hrs)+" hours and "+str(minutes)+" minutes ago]"

for root, dirs, files in os.walk(directory):
    for file in files:
        file = os.path.join(root, file); ftime = os.path.getctime(file)
        edited = currtime - ftime
        if edited < t:
            print(file, calc_time(int(edited/60)))

如何使用

  1. 如果目录尚不存在,则创建该目录~/bin
  2. 将上述脚本复制到一个空文件中,并将其保存findrecent~/bin
  3. 使脚本可执行
  4. 退出并重新登录即可完成

笔记

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

答案4

使用哈瑟贾'沙阿尔纳费萨的回答

find /myfolder/ -type f | xargs ls -lt | head

显示最新的,带有完整路径(包括日期)

相关内容