Skip to content

Commit 37a0512

Browse files
Implement custom ls command with support for -1, directories, and -a
1 parent 2e4a8ce commit 37a0512

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

implement-shell-tools/ls/myLs.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
#!/usr/bin/env node
2+
const { program } = require("commander");
3+
const fs = require("fs");
4+
const path = require("path");
5+
6+
function listDirectory(dir, options) {
7+
let entries;
8+
9+
try {
10+
entries = fs.readdirSync(dir, { withFileTypes: true });
11+
} catch (e) {
12+
console.error(`ls: cannot access '${dir}': No such file or directory`);
13+
return;
14+
}
15+
16+
let names = entries.map(e => e.name);
17+
18+
if (options.all) {
19+
names.unshift(".", "..");
20+
} else {
21+
22+
names = names.filter(name => !name.startsWith("."));
23+
}
24+
25+
names.sort();
26+
27+
names.forEach(name => console.log(name));
28+
}
29+
30+
program
31+
.name("myls")
32+
.description("Custom implementation of ls")
33+
.option("-1", "list one file per line (default in our version)")
34+
.option("-a, --all", "include hidden files")
35+
.argument("[dir]", "directory to list", ".")
36+
.action((dir, options) => {
37+
listDirectory(dir, options);
38+
});
39+
40+
program.parse();

0 commit comments

Comments
 (0)