在NodeJS目录中找到最新的文件夹



我需要找到一种方法来获得在目录中创建的最新文件夹。通常在一个文件夹中有3-5个不同的文件夹,我想通过文件夹名称(最新版本编号)或创建的日期和时间找到最新的一个。一般情况下,文件夹名应该是这样的:

version-0101xxxxxxxxxxxx

(x代表最新版本)

您可以使用'fs获取目录' using 'readdirSync',然后递归地查看每个目录。

这个代码片段是从(这个回答的问题)中提取出来的:

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))];
}
let dirs = getDirectoriesRecursive(__dirname);
console.info(path);

这将得到一个包含所有目录的数组,然后你只需要用你需要的条件循环你的数组。

你可以使用node.js内置的fs模块。首先,你需要列出目录中你要搜索的所有文件和文件夹。

let dirs = await fs.readdir(dirName, {
withFileTypes: true,
});

你可以使用fs.promises.readdir。确保添加了选项" withfiletype "因为它提供了可以用来区分文件夹和文件的附加信息。然后,您可以像这样过滤所有文件:

dirs = dirs.filter((file) => file.isDirectory()).map((dirent) => dirent.name);

这会给你一个类似["firstFolder", "secondFolder",等等]的结果然后可以循环遍历上面的数组,并使用fs.promises.stat方法

找到最新的文件夹
let newestFolder = await fs.stat(path.join(dirName, dirs[0]));
let newestFolderName = dirs[0];
for (let directory of dirs) {
const stats = await fs.stat(path.join(dirName, directory));
if (stats.ctimeMs > newestFolder.ctimeMs) {
newestFolder = stats;
newestFolderName = directory;
}
}

然后你可以使用path module:

创建该目录的绝对路径
const absoultePath = path.resolve(path.join(dirName, newestFolderName));
下面是使用promises时函数的样子:
const fs = require("fs/promises");
const path = require("path");
async function getNewestDirectory(dirName) {
let dirs = await fs.readdir(dirName, {
withFileTypes: true,
});
dirs = dirs.filter((file) => file.isDirectory()).map((dirent) => dirent.name);
let newestFolder = await fs.stat(path.join(dirName, dirs[0]));
let newestFolderName = dirs[0];
for (let directory of dirs) {
const stats = await fs.stat(path.join(dirName, directory));
if (stats.ctimeMs > newestFolder.ctimeMs) {
newestFolder = stats;
newestFolderName = directory;
}
}
console.log("newestFolder", newestFolder);
console.log("newestFolderName", newestFolderName);
return path.resolve(path.join(dirName, newestFolderName));
}

和使用同步方法(不推荐):

const fs = require("fs");
let dirs = fs.readdirSync(".", {
withFileTypes: true,
});
dirs = dirs.filter((file) => file.isDirectory()).map((dirent) => dirent.name);
let newestFolder = fs.statSync(dirs[0]);
let newestFolderName = dirs[0];
for (let directory of dirs) {
const stats = fs.statSync(directory);
if (stats.ctimeMs > newestFolder.ctimeMs) {
newestFolder = stats;
newestFolderName = directory;
}
console.log("newestFolder", newestFolder);
console.log("newestFolderName", newestFolderName);
}

最新更新