Node.js:如何检查文件夹是否为空或没有上传文件列表

我正在使用Node.js

我想检查文件夹是否为空 ? 一个select是使用fs.readdir,但是它将大量的文件加载到一个数组中。 我在该文件夹中有超过10000个文件。 加载文件名是无用的,只是为了检查文件夹是否为空。 所以寻找替代解决scheme。

这是一个丑陋的黑客,但我会抛出无论如何。 你可以在目录上调用fs.rmdir 。 如果callback返回一个包含code: 'ENOTEMPTY'的错误,它不是空的。 如果成功,则可以调用fs.mkdir并将其replace。 如果您的脚本是创build目录的脚本,拥有适当的权限等,则此解决scheme可能只是有意义的。

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

您可以使用exec()从NodeJS内执行任何* nix shell命令。 所以对于这个你可以使用老的'ls -A $ {文件夹} | 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; } }); 

怎么样? 即, exists myDir/* 。 它不是由节点(TOW v0.10.15)开箱,而是一堆模块会为你做,比如minimatch

就像添加一个节点模块extfs一样 ,可以使用函数isEmpty()来检查目录是否为空,如下面的代码片段所示:

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

查看有关该function同步版本的文档链接。