// using zig-0.15.2 const std = @import("std"); const File = struct { path: [:0]u8, size: u64, duplicate_size: ?usize = null, hash: ?u256 = null, }; pub fn main() !void { var gpa = std.heap.GeneralPurposeAllocator(.{}){}; const allocator = gpa.allocator(); defer _ = gpa.deinit(); var list: std.ArrayList(File) = .empty; defer list.deinit(allocator); var args_it = std.process.args(); _ = args_it.next(); // skip program name while (args_it.next()) |arg| { const dir = try std.fs.cwd().openDir(arg, .{ .iterate = true }); var walker = try dir.walk(allocator); defer walker.deinit(); while (try walker.next()) |entry| { if (entry.kind == .file) { const stat = try entry.dir.statFile(entry.basename); try list.append(allocator, .{ .path = try allocator.dupeZ(u8, entry.path), .size = stat.size, }); } } } for (list.items, 0..) |*item, idx| { for (list.items) |*item2| { if (item.size == item2.size) { item.duplicate_size = idx; item2.duplicate_size = idx; } } std.debug.print("path: {s}, size {}\n", .{ item.path, item.size }); allocator.free(item.path); } }