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 。 它是readdir
和readdirSync
函数为您提供了所有包含的文件名(不包括.
和..
)的数组。 如果长度为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同步版本的文档链接。