Gro*_*fit 230 directory node.js
我希望这会是一件简单的事情,但我找不到任何可以做到的事情.
我只想获取给定文件夹/目录中的所有文件夹/目录.
例如:
<MyFolder>
|- SomeFolder
|- SomeOtherFolder
|- SomeFile.txt
|- SomeOtherFile.txt
|- x-directory
Run Code Online (Sandbox Code Playgroud)
我希望得到一个数组:
["SomeFolder", "SomeOtherFolder", "x-directory"]
Run Code Online (Sandbox Code Playgroud)
或上面的路径,如果这是如何服务...
那么上面有什么已经存在的吗?
Nic*_*rdy 403
这是这个答案的一个较短的同步版本,它可以列出当前目录中的所有目录(隐藏或不隐藏):
const { lstatSync, readdirSync } = require('fs')
const { join } = require('path')
const isDirectory = source => lstatSync(source).isDirectory()
const getDirectories = source =>
readdirSync(source).map(name => join(source, name)).filter(isDirectory)
Run Code Online (Sandbox Code Playgroud)
pra*_*mil 93
感谢JavaScript ES6(ES2015)语法功能,它是一个内容:
**同步版**
const { readdirSync, statSync } = require('fs')
const { join } = require('path')
const dirs = p => readdirSync(p).filter(f => statSync(join(p, f)).isDirectory())
Run Code Online (Sandbox Code Playgroud)
Node.js 10+的异步版本(实验性)
const { readdir, stat } = require("fs").promises
const { join } = require("path")
const dirs = async path => {
let dirs = []
for (const file of await readdir(path)) {
if ((await stat(join(path, file))).isDirectory()) {
dirs = [...dirs, file]
}
}
return dirs
}
Run Code Online (Sandbox Code Playgroud)
小智 26
使用路径列出目录.
function getDirectories(path) {
return fs.readdirSync(path).filter(function (file) {
return fs.statSync(path+'/'+file).isDirectory();
});
}
Run Code Online (Sandbox Code Playgroud)
Pat*_*ney 19
我来到这里寻找一种方法来获取所有子目录及其所有子目录等.基于接受的答案,我写道:
const fs = require('fs');
const path = require('path');
function flatten(lists) {
return lists.reduce((a, b) => a.concat(b), []);
}
function getDirectories(srcpath) {
return fs.readdirSync(srcpath)
.map(file => path.join(srcpath, file))
.filter(path => fs.statSync(path).isDirectory());
}
function getDirectoriesRecursive(srcpath) {
return [srcpath, ...flatten(getDirectories(srcpath).map(getDirectoriesRecursive))];
}
Run Code Online (Sandbox Code Playgroud)
nic*_*eet 10
这应该这样做:
CoffeeScript(同步)
fs = require 'fs'
getDirs = (rootDir) ->
files = fs.readdirSync(rootDir)
dirs = []
for file in files
if file[0] != '.'
filePath = "#{rootDir}/#{file}"
stat = fs.statSync(filePath)
if stat.isDirectory()
dirs.push(file)
return dirs
Run Code Online (Sandbox Code Playgroud)
CoffeeScript(异步)
fs = require 'fs'
getDirs = (rootDir, cb) ->
fs.readdir rootDir, (err, files) ->
dirs = []
for file, index in files
if file[0] != '.'
filePath = "#{rootDir}/#{file}"
fs.stat filePath, (err, stat) ->
if stat.isDirectory()
dirs.push(file)
if files.length == (index + 1)
cb(dirs)
Run Code Online (Sandbox Code Playgroud)
JavaScript(异步)
var fs = require('fs');
var getDirs = function(rootDir, cb) {
fs.readdir(rootDir, function(err, files) {
var dirs = [];
for (var index = 0; index < files.length; ++index) {
var file = files[index];
if (file[0] !== '.') {
var filePath = rootDir + '/' + file;
fs.stat(filePath, function(err, stat) {
if (stat.isDirectory()) {
dirs.push(this.file);
}
if (files.length === (this.index + 1)) {
return cb(dirs);
}
}.bind({index: index, file: file}));
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
小智 6
或者,如果您能够使用外部库,则可以使用filehound.它支持回调,承诺和同步调用.
使用承诺:
const Filehound = require('filehound');
Filehound.create()
.path("MyFolder")
.directory() // only search for directories
.find()
.then((subdirectories) => {
console.log(subdirectories);
});
Run Code Online (Sandbox Code Playgroud)
使用回调:
const Filehound = require('filehound');
Filehound.create()
.path("MyFolder")
.directory()
.find((err, subdirectories) => {
if (err) return console.error(err);
console.log(subdirectories);
});
Run Code Online (Sandbox Code Playgroud)
同步通话:
const Filehound = require('filehound');
const subdirectories = Filehound.create()
.path("MyFolder")
.directory()
.findSync();
console.log(subdirectories);
Run Code Online (Sandbox Code Playgroud)
有关更多信息(和示例),请查看文档:https://github.com/nspragg/filehound
免责声明:我是作者.
对于 node.js 版本 >= v10.13.0,如果选项设置为,fs.readdirSync将返回一个fs.Dirent对象数组。withFileTypestrue
所以你可以使用,
const fs = require('fs')
const directories = source => fs.readdirSync(source, {
withFileTypes: true
}).reduce((a, c) => {
c.isDirectory() && a.push(c.name)
return a
}, [])
Run Code Online (Sandbox Code Playgroud)
使用 fs-extra,它承诺异步 fs 调用,以及新的 await 异步语法:
const fs = require("fs-extra");
async function getDirectories(path){
let filesAndDirectories = await fs.readdir(path);
let directories = [];
await Promise.all(
filesAndDirectories.map(name =>{
return fs.stat(path + name)
.then(stat =>{
if(stat.isDirectory()) directories.push(name)
})
})
);
return directories;
}
let directories = await getDirectories("/")
Run Code Online (Sandbox Code Playgroud)
小智 5
var getDirectories = (rootdir , cb) => {
fs.readdir(rootdir, (err, files) => {
if(err) throw err ;
var dirs = files.map(filename => path.join(rootdir,filename)).filter( pathname => fs.statSync(pathname).isDirectory());
return cb(dirs);
})
}
getDirectories( myDirectories => console.log(myDirectories));``
Run Code Online (Sandbox Code Playgroud)