要求:已安装 node.js
。
快速获取文件夹内所有文件的名称
console.log(fs.readdirSync('./folder-path'))
示例:
# 确保已安装node.js
node -v
v22.9.0
# 现在可以开始了
node
> console.log(fs.readdirSync('./folder'))
[
'.DS_Store',
'authors',
'blog',
'headerNavLinks.js',
'logo.svg',
'projectsData.js',
'SITE_METADATA.js',
'snippets'
]
更完整的用法
在脚本文件中使用
创建一个名为 list-files.js
的文件:
const fs = require('fs');
const path = require('path');
// 读取当前目录
const files = fs.readdirSync('./');
console.log('当前目录的文件:', files);
// 读取指定目录
const targetDir = './src';
if (fs.existsSync(targetDir)) {
const srcFiles = fs.readdirSync(targetDir);
console.log('src目录的文件:', srcFiles);
} else {
console.log('目录不存在');
}
运行脚本:
node list-files.js
过滤特定文件类型
const fs = require('fs')
// 只获取JavaScript文件
const jsFiles = fs.readdirSync('./').filter((file) => file.endsWith('.js'))
console.log('JavaScript文件:', jsFiles)
// 只获取目录
const dirs = fs
.readdirSync('./', { withFileTypes: true })
.filter((dirent) => dirent.isDirectory())
.map((dirent) => dirent.name)
console.log('目录:', dirs)
递归读取子目录
const fs = require('fs')
const path = require('path')
function getAllFiles(dir, fileList = []) {
const files = fs.readdirSync(dir)
files.forEach((file) => {
const filePath = path.join(dir, file)
if (fs.statSync(filePath).isDirectory()) {
getAllFiles(filePath, fileList)
} else {
fileList.push(filePath)
}
})
return fileList
}
// 使用示例
const allFiles = getAllFiles('./')
console.log('所有文件(包括子目录):', allFiles)
一行命令快速查看
# 直接在命令行中运行
node -e "console.log(fs.readdirSync('./'))"
# 查看特定目录
node -e "console.log(fs.readdirSync('./src'))"
# 只显示JavaScript文件
node -e "console.log(fs.readdirSync('./').filter(f => f.endsWith('.js')))"
注意事项
fs.readdirSync()
是同步方法,会阻塞代码执行- 对于大型目录,建议使用异步版本
fs.readdir()
- 确保目录存在,否则会抛出错误
- 返回的数组包含文件和目录名称