我有一个 264420 文件的目录
$ find /Users/Username -type f | wc -l
264420
我正在尝试使用简单counter++
问题是counter++
提供的文件数量不正确,而array.push(file)
array.length
最终工作正常并且返回正确数量的文件 - 264420
$ node total-files.js
114 'total_files_count'
264420 'total_files_array_count'
简化的脚本如下所示:
const fs = require('fs')
const path = require('path')
const dir = '/Users/Username'
let totalFiles = 0
let totalFilesArray = []
const totalFilesObj = getFilesRecursively(dir, totalFiles, totalFilesArray)
console.log(totalFilesObj.total_files, 'total_files_count', totalFilesObj.total_files_array.length, 'total_files_array_count')
function getFilesRecursively(dir, totalFiles, totalFilesArray){
totalFiles = totalFiles || 0
totalFilesArray = totalFilesArray || []
try { var files = fs.readdirSync(dir) }
catch(err) { console.error(err.message) }
for (var i in files) {
var name = path.join(dir, files[i])
try {
let stats = fs.lstatSync(name) // track symlink as link, but not as file
if (stats.isDirectory())
getFilesRecursively(name, totalFiles, totalFilesArray)
else if (stats.isFile()) {
totalFiles++ // why this not working? so we should use .push to array instead?
totalFilesArray.push(name)
}
} catch(err) { console.error(err.message) }
}
return { "total_files" : totalFiles, "total_files_array" : totalFilesArray }
}
我打算在包含数十万个文件的大型目录上运行脚本,并希望使用计数器增量,这比推送到阵列更快。
请帮助。
答案 0 :(得分:2)
两个原因
成功
if (stats.isDirectory())
{
var returnVal = getFilesRecursively(name, totalFiles, totalFilesArray);
totalFiles += returnVal.total_files;
}
此外,在方法的开头将totalFiles
值设置为0 。
答案 1 :(得分:0)