Search code examples
file-iodeno

How can I recursively read a directory in Deno?


I'm trying to recursively read a file in Deno using Deno.readDir, but the example they provide only does the folder given:

for await (const entry of Deno.readDir(Deno.cwd())) {
  console.log(entry.name);
}

How can I make this recursive?


Solution

  • Deno's standard library includes a function called walk for this purpose. It's available in std/fs/walk.ts. Here's an example:

    /Users/deno/so-74953935/main.ts:

    import { walk } from "https://deno.land/[email protected]/fs/walk.ts";
    
    for await (const walkEntry of walk(Deno.cwd())) {
      const type = walkEntry.isSymlink
        ? "symlink"
        : walkEntry.isFile
        ? "file"
        : "directory";
    
      console.log(type, walkEntry.path);
    }
    
    

    Running in the terminal:

    % pwd
    /Users/deno/so-74953935
    
    % ls -AF
    .vscode/    deno.jsonc  deno.lock   main.ts
    
    % ls -AF .vscode 
    settings.json
    
    % deno --version
    deno 1.29.1 (release, x86_64-apple-darwin)
    v8 10.9.194.5
    typescript 4.9.4
    
    % deno run --allow-read main.ts
    directory /Users/deno/so-74953935
    file /Users/deno/so-74953935/main.ts
    file /Users/deno/so-74953935/deno.jsonc
    file /Users/deno/so-74953935/deno.lock
    directory /Users/deno/so-74953935/.vscode
    file /Users/deno/so-74953935/.vscode/settings.json