在文件夹中查找最新修改的文​​件

Posted

技术标签:

【中文标题】在文件夹中查找最新修改的文​​件【英文标题】:Finding latest modified file in a folder 【发布时间】:2012-06-12 23:29:42 【问题描述】:

如何浏览文件夹并找出最新创建/修改的文件并将其完整路径作为字符串放入 var 中?

还没有真正弄清楚 io/io 的最佳实践

【问题讨论】:

【参考方案1】:

看看http://nodejs.org/api/fs.html#fs_class_fs_stats

查看ctimemtime 以查找创建和修改时间。

类似这样的:

var fs = require('fs');

fs.readdir(".",function(err, list)
    list.forEach(function(file)
        console.log(file);
        stats = fs.statSync(file);
        console.log(stats.mtime);
        console.log(stats.ctime);
    )
)

循环当前目录(.)并记录文件名,抓取文件统计信息并记录修改时间(mtime)和创建时间(ctime)

【讨论】:

如果我有 700 个文件,我的情况就是这样。【参考方案2】:

当文件位于同一目录中时,Brad 的 sn-p 可以正常工作(非常棒,谢谢),但如果您正在检查另一个文件夹,则需要解析 statSync 参数的路径:

const fs = require('fs');
const resolve, join = require('path');

fs.readdir(resolve('folder/inside'),function(err, list)
    list.forEach(function(file)
       console.log(file);
       stats = fs.statSync(resolve(join('folder/inside', file)));
       console.log(stats.mtime);
       console.log(stats.ctime);
    )
)

【讨论】:

【参考方案3】:

假设您想要获取目录中的最新文件并将其发送给想要获取文件夹中不存在的文件的客户端。例如,如果您的静态中间件无法提供文件并自动调用 next() 函数。

您可以使用 glob 模块获取您要搜索的文件列表,然后在一个函数中对它们进行归约;

// handle non-existent files in a fallthrough middleware
app.use('/path_to_folder/', function (req, res) 
    // search for the latest png image in the folder and send to the client
    glob("./www/path_to_folder/*.png", function(err, files) 
        if (!err) 

            let recentFile = files.reduce((last, current) => 

                let currentFileDate = new Date(fs.statSync(current).mtime);
                let lastFileDate = new Date(fs.statSync(last).mtime);

                return ( currentFileDate.getTime() > lastFileDate.getTime() ) ? current: last;
            );

            res.set("Content-Type", "image/png");
            res.set("Transfer-Encoding", "chunked");
            res.sendFile(path.join(__dirname, recentFile));
        
    );

【讨论】:

【参考方案4】:

为了根据名称和其他东西下载最新的文件:

//this function runs a script
//this script exports db data
// and saves into a directory named reports
router.post("/download", function (req, res) 

//run the script
  var yourscript = exec("./export.sh", (error, stdout, stderr) => 
    console.log(stdout);
    console.log(stderr);
  );
//download latest file
  function downloadLatestFile() 
//set the path
    const dirPath = "/Users/tarekhabche/Desktop/awsTest/reports";
//get the latest created file
    const lastFile = JSON.stringify(getMostRecentFile(dirPath));
//parse the files name since it contains a date

    fileDate = lastFile.substr(14, 19);
    console.log(fileDate);
//download the file
    const fileToDownload = `reports/info.$fileDate.csv`;
    console.log(fileToDownload);
    res.download(fileToDownload);
  
// download after exporting the db since export takes more time
  setTimeout(function () 
    downloadLatestFile();
  , 1000);
);
//gets the last file in a directory

const getMostRecentFile = (dir) => 
  const files = orderRecentFiles(dir);
  return files.length ? files[0] : undefined;
;
//orders files accroding to date of creation
const orderRecentFiles = (dir) => 
  return fs
    .readdirSync(dir)
    .filter((file) => fs.lstatSync(path.join(dir, file)).isFile())
    .map((file) => ( file, mtime: fs.lstatSync(path.join(dir, file)).mtime ))
    .sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
;
const dirPath = "reports";
getMostRecentFile(dirPath);

【讨论】:

如果对您的代码有更多解释,了解它如何准确解决问题,我会很有用。 @BenjaminZach 会做的 @BenjaminZach 更好?如果您可以投票,因为我无法提出任何问题

以上是关于在文件夹中查找最新修改的文​​件的主要内容,如果未能解决你的问题,请参考以下文章

从 Azure Blob 获取最新修改的文​​件

在 PowerShell 中查找最新修改的文​​件信息

在bash中对所有最近修改过的文件运行脚本

使用聚合查找最新批次中的文件数

Ant:如何从目录中选择最新的修改文件?

比较C中两个文件的日期和时间[关闭]