Zig Cookbook

介绍

查找过去 24 小时修改过的文件

通过 Zig 的标准库 std.Io.Dir,我们可以轻松地遍历目录并检查文件的元数据。以下示例展示了如何查找在过去24小时内修改过的文件。

对于每个文件,我们使用 statFile() 函数获取其元数据,并检查 mtime(修改时间)字段是否在过去24小时内。

//! Find files that have been modified in the last 24 hours

const std = @import("std");
const print = std.debug.print;

pub fn main(init: std.process.Init) !void {
    const gpa = init.gpa;
    const io = init.io;

    var iter_dir = try std.Io.Dir.cwd().openDir(io, "src", .{ .iterate = true });
    defer iter_dir.close(io);

    var walker = try iter_dir.walk(gpa);
    defer walker.deinit();

    const now_ns = std.Io.Clock.real.now(io).nanoseconds;
    while (try walker.next(io)) |entry| {
        if (entry.kind != .file) {
            continue;
        }

        const stat = try iter_dir.statFile(io, entry.path, .{});
        const last_modified = stat.mtime.nanoseconds;
        const duration = now_ns - last_modified;
        if (duration < std.time.ns_per_hour * 24) {
            print("Last modified: {d} seconds ago, size:{d} bytes, filename: {s}\n", .{
                @divTrunc(duration, std.time.ns_per_s),
                stat.size,
                entry.path,
            });
        }
    }
}