How do you get a list of the names of all files present in a directory in Node.js?

后端 未结 25 1242
天涯浪人
天涯浪人 2020-11-22 07:47

I\'m trying to get a list of the names of all the files present in a directory using Node.js. I want output that is an array of filenames. How can I do this?

25条回答
  •  慢半拍i
    慢半拍i (楼主)
    2020-11-22 08:30

    I'm assuming from your question that you don't want directories names, just files.

    Directory Structure Example

    animals
    ├── all.jpg
    ├── mammals
    │   └── cat.jpg
    │   └── dog.jpg
    └── insects
        └── bee.jpg
    

    Walk function

    Credits go to Justin Maier in this gist

    If you want just an array of the files paths use return_object: false:

    const fs = require('fs').promises;
    const path = require('path');
    
    async function walk(dir) {
        let files = await fs.readdir(dir);
        files = await Promise.all(files.map(async file => {
            const filePath = path.join(dir, file);
            const stats = await fs.stat(filePath);
            if (stats.isDirectory()) return walk(filePath);
            else if(stats.isFile()) return filePath;
        }));
    
        return files.reduce((all, folderContents) => all.concat(folderContents), []);
    }
    

    Usage

    async function main() {
       console.log(await walk('animals'))
    }
    

    Output

    [
      "/animals/all.jpg",
      "/animals/mammals/cat.jpg",
      "/animals/mammals/dog.jpg",
      "/animals/insects/bee.jpg"
    ];
    

提交回复
热议问题