Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict'
- const fs = require("fs");
- const path = require("path");
- let argvLgt = process.argv.length;
- let isKeyD = false;
- let isKeyO = [false, ""];
- for (let i = 0; i < argvLgt && isKeyD == false && isKeyO[0] == false; i++){
- if (process.argv[i] == "-o") {
- isKeyO[0] = true;
- isKeyO[1] = process.argv[i + 1];
- if (isKeyO[1] == undefined) {
- console.error(new Error("Missing argument to -o option"));
- return
- }
- fs.writeFileSync(isKeyO[1], "");
- }
- if (process.argv[i] == "-d") isKeyD = true;
- }
- //tree получает путь к файлу, префикс, если файл/папка вложенные
- //и массив счетчиков файлов/папок
- const tree = (directory, pref, counts) => {
- if (!isKeyD){
- let filePaths = fs.readdirSync(directory);
- //запоминание элементов в папке (директтории)
- filePaths.forEach((filePath, index) => {
- if (filePath.charAt(0) == ".") {
- return
- };
- //если файл - скрытый - пропускаем
- let absolute = path.join(directory, filePath);
- //путь к текущей папке от "корня"
- let isFile = fs.lstatSync(absolute).isFile();
- //проверка, является ли объект файлом (значение true/false)
- if (isFile)
- counts["files"]++;
- else
- counts["directories"]++;
- // если файл явлется последним в директории, выводится с символом
- //последнего файла
- if (index == filePaths.length - 1) {
- if (!isKeyO[0])
- console.log(`${pref}└── ${filePath}`);
- else fs.appendFileSync(isKeyO[1], `\n${pref}└── ${filePath}`)
- //&{...} - unquote (аналогия в скиме, `(,funcName))
- if (!(isFile)) {
- tree(absolute, `${pref} `,counts);
- }
- } else {
- if (!isKeyO[0])
- console.log(`${pref}├── ${filePath}`);
- else fs.appendFileSync(isKeyO[1], `\n${pref}├── ${filePath}`);
- if (!(isFile)) {
- tree(absolute, `${pref}│ `, counts);
- }
- }
- });
- } else {
- let filePaths = fs.readdirSync(directory);
- filePaths.forEach((filePath, index) => {
- let absolute = path.join(directory, filePath);
- let isDir = fs.lstatSync(absolute).isDirectory();
- if (filePath.charAt(0) == "." || !(isDir)) {
- return;
- }
- counts["directories"]++;
- if (index == filePaths.length - 1) {
- if (!isKeyO[0])
- console.log(`${pref}└── ${filePath}`);
- else fs.appendFileSync(isKeyO[1], `\n${pref}└── ${filePath}`);
- tree(absolute, `${pref} `, counts);
- } else {
- if (!isKeyO[0]){
- console.log(`${pref}├── ${filePath}`);
- } else fs.appendFileSync(isKeyO[1], `\n${pref}├── ${filePath}`)
- tree(absolute, `${pref}│ `, counts);
- }
- });
- }
- };
- let directory = (process.argv[2] == "-d" || "-o" ? "." : process.argv[2]);
- //if (directory == undefined)
- // directory = ".";
- const counts = {
- directories: 0,
- files: 0
- };
- if (!isKeyO[0]){
- console.log(directory);
- } else fs.appendFileSync(isKeyO[1], directory);
- tree(directory, "", counts);
- if (!isKeyD){
- if (!isKeyO[0])
- console.log(`\n ${counts.directories} directories, ${counts.files} files`);
- else
- fs.appendFileSync(isKeyO[1], `\n ${counts.directories} directories, ${counts.files} files`);
- }
- else if (!isKeyO[0])
- console.log(`\n ${counts.directories} directories`);
- else fs.appendFileSync (isKeyO[1], `\n ${counts.directories} directories`);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement