如何将文件移动到文件夹名称为创建日期的文件夹中?

问题描述 投票:0回答:1

我有很多文件想要移动到文件夹格式为 YYYY-MM 的文件夹中,并且在该 YYYY-MM 中创建的任何文件都应放置在其中。我想使用

nodejs

来做到这一点

问题

  1. 如何获取文件的创建日期并使用它移动到基于 YYYY-MM 格式的文件夹中?
  2. 如何从文件的创建日期开始按 YYYY-MM 对文件进行分组?

文件

  1. 文件1 --> 创建=2023-01-01
  2. 文件2 --> 创建=2023-01-05
  3. 文件3 --> 创建=2023-01-20
  4. 文件4 --> 创建=2023-05-06
  5. 文件5 --> 创建=2023-06-04
  6. 文件6 --> 创建=2023-06-05
  7. file7 --> 创建=2023-05-25

预期结果

  1. 文件夹:2023-01 -- 文件1,文件2,文件3
  2. 文件夹:2023-05 -- 文件4、文件7
  3. 文件夹:2023-06 -- 文件5,文件6

我尝试了什么以及我陷入困境

const fs = require('fs');

const folderName = '/Users/myuser/targetFolder';

try {
  if (!fs.existsSync(folderName)) {
    fs.mkdirSync(folderName);
    /***** stuck here as I can't figure out how to access the file create ****/
    fs.readdirSync(folderPath).map(fileName => {
      return path.join(folderPath, fileName);
    });

  }
} catch (err) {
  console.error(err);
}
node.js file date node-modules
1个回答
0
投票

您现在可以获取每个文件的统计信息,提取从中创建的日期,从日期构造年份文件夹名称,创建年份文件夹,然后将文件移动到该文件夹。

尝试这个(注意您可能需要修改输入/目标文件夹, 因为这适用于以下输入文件夹和输出文件夹结构):

├───input
│       file1
│       file2
│
└───targetFolder
    ├───YYYY-MM
    │       file1
    │
    └───YYYY-MM
            file2
const fs = require('fs');
    
const inputFilesFolder = 'input';

const targetFolder = 'targetFolder';
    
try {

    if (!fs.existsSync(targetFolder)) {
        fs.mkdirSync(targetFolder);
    }

    fs.readdirSync(inputFilesFolder).map(fileName => {


        // get file metadata
        const stats = fs.statSync(`${inputFilesFolder}/${fileName}`);

        console.log(fileName, ' stats: ', stats);

        // skip directory
        if (!stats.isDirectory()) {

            // get date created
            const birthtime = stats.birthtime;

            // construct year folder name
            const year = String(birthtime.getFullYear());

            const month = String(birthtime.getMonth() + 1);

            // pad month..
            const monthPadded = month.length == 1 ? '0' + month : month;

            const yearFolderName = `${year}-${monthPadded}`;

            console.log('year folder name', yearFolderName);

            // create year folder name if not exists
            if (!fs.existsSync(`${targetFolder}/${yearFolderName}`)) {
                fs.mkdirSync(`${targetFolder}/${yearFolderName}`);
            }

            // move file
            try {
                fs.renameSync(`${inputFilesFolder}/${fileName}`, `${targetFolder}/${yearFolderName}/${fileName}`)
                console.log('moved', fileName);
            } catch (err) {
                console.log(err);
            }        
        }

    });

} catch (err) {
    console.error(err);
}
© www.soinside.com 2019 - 2024. All rights reserved.