반응형
지정한 경로에 대해 파일의 개수를 구하려면 fs와 path 모듈을 이용하면 된다.
폴더 내부에 폴더가 있다면 재귀적으로 함수를 호출해서 파일 개수를 누적한다.
const fs = require("fs");
const path = require("path");
const countFilesInDirectory = (dir) => {
let count = 0;
const items = fs.readdirSync(dir);
for (const item of items) {
const itemPath = path.join(dir, item);
const stats = fs.statSync(itemPath);
if (stats.isDirectory()) {
count += countFilesInDirectory(itemPath); // 하위 폴더 파일 개수
} else if (stats.isFile()) {
count++;
}
}
return count;
};
const folderPath = "./";
const totalFiles = countFilesInDirectory(folderPath);
console.log("Total files:", totalFiles);
만약 해당 폴더의 파일 개수를 포함해, 어떤 폴더가 있는지, 그리고 그 폴더의 파일 개수도 알고 싶다면,
다음과 같이 child 배열을 추가해서 재귀적으로 정보를 저장한다.
const fs = require("fs");
const path = require("path");
const countFilesInDirectory = (dir) => {
let totalCount = 0;
let child = [];
const items = fs.readdirSync(dir);
for (const item of items) {
const itemPath = path.join(dir, item);
const stats = fs.statSync(itemPath);
if (stats.isDirectory()) {
const { totalCount: subfolderCount, child: subfolders } = countFilesInDirectory(itemPath);
child.push({
totalCount: subfolderCount,
name: itemPath,
child: subfolders,
});
totalCount += subfolderCount;
}
else if (stats.isFile()) {
totalCount++;
}
}
return { totalCount, child };
};
// 파일 개수를 세고 싶은 상위 폴더의 경로를 지정합니다.
const folderPath = "./";
const { totalCount, child } = countFilesInDirectory(folderPath);
console.log("Total files in top folder:", totalCount);
console.log("Subfolders:", child);
오브젝트가 포함된 경우 위와 같이 [Object]로 출력되기 때문에
오브젝트를 재귀적으로 출력하도록 print 함수를 만든다.
const printAllObjects = (obj, depth = 0) => {
for (const key in obj) {
if (typeof obj[key] === "object" && obj[key] !== null) {
const indent = " ".repeat(depth);
console.log(indent + key + ":");
printAllObjects(obj[key], depth + 1);
} else {
const indent = " ".repeat(depth);
console.log(indent + key + ":", obj[key]);
}
}
};
출력 예시는 다음과 같다.
Total files in top folder: 156
Subfolders: [
{
totalCount: 74,
name: 'globfiles',
child: [ [Object], [Object], [Object] ]
},
{
totalCount: 74,
name: 'myfiles',
child: [ [Object], [Object], [Object] ]
},
{ totalCount: 1, name: 'test', child: [] },
{ totalCount: 2, name: 'test2', child: [ [Object] ] }
]
PS D:\github\auto-test\actions> node .\countFile.js
0:
totalCount: 74
name: globfiles
child:
0:
totalCount: 9
name: globfiles\abc1
...
2:
totalCount: 1
name: test
child:
3:
totalCount: 2
name: test2
child:
0:
totalCount: 1
name: test2\test3
child:
간단하게 json으로 변환하는 방법도 있다.
let json = JSON.stringify(child, null, 2);
console.log(json);
...
[
{
"totalCount": 74,
"name": "globfiles",
"child": [
...
{
"totalCount": 1,
"name": "test",
"child": []
},
{
"totalCount": 2,
"name": "test2",
"child": [
{
"totalCount": 1,
"name": "test2\\test3",
"child": []
}
]
}
]
전체 코드는 다음과 같다.
const fs = require("fs");
const path = require("path");
const countFilesInDirectory = (dir) => {
let totalCount = 0;
let child = [];
const items = fs.readdirSync(dir);
for (const item of items) {
const itemPath = path.join(dir, item);
const stats = fs.statSync(itemPath);
if (stats.isDirectory()) {
const { totalCount: subfolderCount, child: subfolders } = countFilesInDirectory(itemPath);
child.push({
totalCount: subfolderCount,
name: itemPath,
child: subfolders,
});
totalCount += subfolderCount;
}
else if (stats.isFile()) {
totalCount++;
}
}
return { totalCount, child };
};
const folderPath = "./";
const { totalCount, child } = countFilesInDirectory(folderPath);
console.log("Total files in top folder:", totalCount);
console.log("Subfolders:", child);
const printAllObjects = (obj, depth = 0) => {
for (const key in obj) {
if (typeof obj[key] === "object" && obj[key] !== null) {
const indent = " ".repeat(depth);
console.log(indent + key + ":");
printAllObjects(obj[key], depth + 1);
} else {
const indent = " ".repeat(depth);
console.log(indent + key + ":", obj[key]);
}
}
};
printAllObjects(child);
let json = JSON.stringify(child, null, 2);
console.log(json);
반응형
'개발 > Node JS' 카테고리의 다른 글
Node JS - Chonky 파일 맵 만들기 (Make Chonky File Map) (0) | 2024.03.16 |
---|---|
Node JS - dayjs로 날짜, 시간 관리하기 (0) | 2024.02.22 |
Node JS - multer로 이미지 업로드하기 (Upload Images with multer) (0) | 2024.01.22 |
Node JS - exec으로 Git Push 하기 (0) | 2024.01.14 |
Node JS - PM2 ecosystem.config.js로 환경 변수 설정하기 (0) | 2023.12.25 |
댓글