Node.js:如何在没有上传文件列表的情况下检查文件夹是否为空

问题描述 投票:16回答:6

我正在使用Node.js

我想检查文件夹是否为空?一种选择是使用fs.readdir,但是它将整个文件加载到数组中。我的文件夹中有超过10000个文件。仅检查文件夹是否为空,加载文件名没有用。因此,正在寻找替代解决方案。

file node.js directory fs
6个回答
13
投票

如何使用本机fs模块http://nodejs.org/api/fs.html#fs_fs_readdir_path_callback的节点。它的readdirreaddirSync函数为您提供了所有包含的文件名的数组(...除外)。如果长度为0,则您的目录为空。


11
投票

这是一个丑陋的技巧,但我还是会把它扔出去。您可以仅在目录上调用fs.rmdir。如果回调返回包含code: 'ENOTEMPTY'的错误,则该错误不为空。如果成功,则可以调用fs.mkdir并替换它。仅当您的脚本是首先创建目录,具有适当权限等的脚本时,此解决方案才有意义。


6
投票

您可以使用exec()从NodeJS中执行任何* nix shell命令。因此,您可以使用旧的'ls -A $ {folder} | wc -l'命令(列出$ {folder}中包含的所有文件/目录,从要从计数中排除的输出中隐藏当前目录(。)和父目录(..)的条目,并对它们进行计数号)。

例如,如果./tmp在下面不包含任何文件/目录,将显示'目录./tmp为空。”。否则,它将显示它包含的文件/目录的数量。

var dir = './tmp';
exec( 'ls -A ' + dir + ' | wc -l', function (error, stdout, stderr) {
    if( !error ){
        var numberOfFilesAsString = stdout.trim();
        if( numberOfFilesAsString === '0' ){
            console.log( 'Directory ' + dir + ' is empty.' );
        }
        else {
            console.log( 'Directory ' + dir + ' contains ' + numberOfFilesAsString + ' files/directories.' );
        }
    }
    else {
        throw error;
    }
});

0
投票

关于浮球呢?即exists myDir/*。逐个节点不支持该功能(TOW v0.10.15),但是一堆模块会为您做到这一点,例如minimatch


0
投票

只需添加一个节点模块extfs,可使用功能isEmpty()来检查目录是否为空,如以下代码片段所示:

var fs = require('extfs');

fs.isEmpty('/home/myFolder', function (empty) {
  console.log(empty);
});

查看此功能的同步版本的文档链接。


0
投票

与我在how to determine whether the directory is empty directory with nodejs中的答案重复

有可能使用为目录创建迭代器的opendir方法调用。

这将消除读取所有文件的需要,避免了潜在的内存和时间开销

    import {promises as fsp} from "fs"
    const dirIter = await fsp.opendir(_folderPath);
    const {value,done} = await dirIter[Symbol.asyncIterator]().next();
    await dirIter.close()

完成值将告诉您目录是否为空

© www.soinside.com 2019 - 2024. All rights reserved.