读取目录中的所有文件名

Published on
Published on
/2 mins read/---

要求:已安装 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 的文件:

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()
  • 确保目录存在,否则会抛出错误
  • 返回的数组包含文件和目录名称