写一个 dir 命令

2021-11-23 大约 1 分钟

# 写一个 dir 命令

dir 是 directory(目录)的缩写,表示列举出当前目录下的所有文件夹和文件。

我们一般在 dos 命令行使用这个命令,演示看下图。

dir命令

那么,我们用 Node.js 来实现一下这个命令,代码如下。

let fs = require("fs");
let files = fs.readdirSync(".", { encoding: "utf-8" });
function getDateTime(t) {
    let y = t.getFullYear();
    let m = t.getMonth() + 1;
    let d = t.getDate();
    return `${y}-${m}-${d}`;
}

/**
 * 前置填充函数
 * 输入:'123'
 * 输出:'   123'
 * @param {string} str 字符串
 */
function padStart(str) {
    return ("     " + str).substr(-5);
}
files.forEach((file) => {
    // 查询文件属性
    let stats = fs.statSync(file);
    // stats的值为一个文件属性对象
    // {
    //     dev: 750391426,
    //     mode: 33206,
    //     nlink: 1,
    //     uid: 0,
    //     gid: 0,
    //     rdev: 0,
    //     blksize: 4096,
    //     ino: 18295873490538850,
    //     size: 152,
    //     blocks: 0,
    //     atimeMs: 1609907740867.3384,
    //     mtimeMs: 1609907740867.3384,
    //     ctimeMs: 1609907740867.3384,
    //     birthtimeMs: 1609907644280.0369,
    //     atime: 2021-01-06T04:35:40.867Z,
    //     mtime: 2021-01-06T04:35:40.867Z,
    //     ctime: 2021-01-06T04:35:40.867Z,
    //     birthtime: 2021-01-06T04:34:04.280Z
    // }
    // 定义每一行的结构,组成为:创建时间 + 文件大小 + 文件名 + 换行符
    let line = getDateTime(stats.birthtime) + " " + padStart(stats.size) + " " + file + "\n";

    // 控制台输出,之所以不用console.log(),请同学们复制此代码自行实验。
    process.stdout.write(line);
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

使用 node dir.js 执行后,结果如下。

D:\codes\test\nodejs\t1>node dir.js
2021-1-8     1 1.txt
2021-1-8    57 a.js
2021-1-8    82 b.js
2021-1-8    59 c.js
2021-1-8    73 d.js
2021-1-8   519 dir.js
2021-1-6    29 hello-world.js
2021-1-8   222 read-write-file.js
2021-1-6   152 simple-http.js
1
2
3
4
5
6
7
8
9
10

更多内容,请访问 陈随易 https://chensuiyi.com (opens new window)

上次编辑于: 2021年11月23日 21:04
贡献者: chensuiyi