我需要找到在目录中创建最新文件夹的方法。通常文件夹中有3-5个不同的文件夹,我希望通过文件夹名(最新版本编号)或创建日期和时间来查找最新的文件夹。通常,文件夹名希望如下:
version-0101xxxxxxxxxxxx
(x代表最新版本)
发布于 2022-05-19 05:08:37
您可以使用'readdirSync',获取带有“fs”的目录,然后递归地查看每个目录。
此代码片段从(这回答了问题)中提取:
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);这将为您提供一个包含所有目录的数组,然后只需使用所需条件循环数组即可。
发布于 2022-05-19 05:17:52
为此,您可以使用node.js内置fs模块。首先,您需要列出要搜索的目录中的所有文件和文件夹。
let dirs = await fs.readdir(dirName, {
withFileTypes: true,
});为此您可以使用fs.promises.readdir。请确保添加"withFileTypes“选项,因为它提供了可用于区分文件夹和文件的其他信息。然后,您可以像这样过滤所有文件:
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模块创建该目录的绝对路径:
const absoultePath = path.resolve(path.join(dirName, newestFolderName));下面是使用承诺的函数的外观
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);
}https://stackoverflow.com/questions/72298641
复制相似问题