【问题标题】:Sequentially numbered directories creation in NodeJS在 NodeJS 中按顺序编号的目录创建
【发布时间】:2014-03-08 20:26:52
【问题描述】:

在给定 max() 现有的 1 + 1 的情况下,我想在 Javascript - NodeJS 中创建连续编号的目录。

例如,如果当前目录有:

screenshots/ch33-001/
screenshots/ch33-002/
screenshots/ch33-003/

脚本应该创建下一个:

screenshots/ch33-004/

如果还没有目录存在,脚本应该创建第一个:

screenshots/ch33-001/

我在 bash 脚本中使用它,但现在我必须将此逻辑移动到 nodejs 中:

browser=ch33
num=1
dirname=.
while [[ -d $dirname ]]; do
    let num++
    dirname=$(echo $browser- $num | awk '{ printf("%s%03d\n", $1, $2) }')
done
mkdir screenshots/$dirname

【问题讨论】:

  • 查看 Node 的 FileSystem module doc 以了解检查文件/目录是否存在和创建目录等内容。其余的只是基本的 Javascript,其完整的解释可能不是您想要的(如果是,那太笼统了,不能在这里问)。
  • 你可能是对的,我只是懒惰。随时改进我的答案;)

标签: javascript node.js bash directory sequential


【解决方案1】:

我会这样做:

var fs = require('fs');
var path = require('path');

var screenshot_dir = './screenshots';

var max = 0;
fs.readdirSync(screenshot_dir).forEach(function (file) {
    var match = file.match(/^ch33-(\d{3})$/);
    if (!match)
        return;

    var num = Number(match[1]);
    if (num > max)
        max = num;
});

fs.mkdirSync(path.join(screenshot_dir,
                       "ch33-" + ("000" + (max + 1)).slice(-3)));

【讨论】:

  • 酷!我喜欢正则表达式,而且我的版本不支持中间缺失目录。谢谢!!!
【解决方案2】:
var fs = require('fs');
var browser = 'ch33';
var build_path = '.';
for (var i=1; fs.existsSync(build_path); i++) {
    build_path = path.join('./screenshots', browser + '-' + helpers.pad(i, 3));
};
fs.mkdirSync(build_path);

为了完整起见:

var helpers = {}; helpers.pad = function(num, size) {
    var s = num+"";
    while (s.length < size) s = "0" + s;
    return s;
};

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-20
    • 2013-03-22
    相关资源
    最近更新 更多