본문 바로가기
개발/Node JS

Node JS - glob으로 파일, 폴더 목록 찾기 (Find Files and Directories with glob)

by 피로물든딸기 2023. 4. 28.
반응형

Node JS 전체 링크

 

참고

- Express Setting

- 경로를 가져와서 Mui Tree View로 파일, 폴더 뷰 만들기

 

glob을 이용하면 파일이나 폴더 목록을 쉽게 찾을 수 있다.

여기서는 7.2.3 ver으로 glob을 설치해보자.

npm install glob@7.2.3

 

Express Setting을 참고해서 server.js를 다음과 같이 구축한다.

const express = require("express");
const app = express();

const useGlob = require("./routes/useGlob");

app.use("/useGlob", useGlob);

app.listen(3002, () =>
  console.log("Node.js Server is running on port 3002...")
);

 

그리고 routes 폴더를 만든 후 useGlob.js를 만든다.

 

useGlob.js는 다음과 같다.

const express = require("express");
const router = express.Router();

const glob = require("glob");

router.get("/", (req, res) => {
  let root = `D:\\github\\globfiles\\*`;
  glob(root, function (error, findPath) {
    if (error) {
      console.log(error);
      res.send({ error });
      return;
    }

    console.log(findPath);
    res.send({ findPath });
  });
});

module.exports = router;

예시 파일

 

아래 압축 파일을 다운 받고 원하는 경로에 압축을 해제해보자.

globfiles.zip
0.00MB

 

여기서 경로는 D:\github\globfiles 이다. 

하지만 윈도우 경로를 설정할 때는 \ 앞에 \ 를 추가해야 한다.

let root = `D:\\github\\globfiles\\*`;

 

vs code로 보면 파일과 폴더는 아래와 같다.


해당 경로에서 폴더와 파일 찾기

 

root가 아래인 경우 다음과 같다.

let root = `D:\\github\\globfiles\\*`;

 

크롬에서 아래 링크를 입력해서 테스트해보자.

http://localhost:3002/useGlob

 

그러면 해당 경로 'D:\github\globfiles' 의 폴더와 파일 경로를 알 수 있다.


해당 경로의 모든 파일과 폴더 찾기

 

경로를 아래와 같이 수정해보자. * 대신 ** 를 추가하였다.

let root = `D:\\github\\globfiles\\**`;

 

그러면 recursive하게 해당 폴더와 파일을 모두 찾는다.


특정 파일 찾기

 

아래와 같이 수정하면 json 파일을 모두 찾는다.

let root = `D:\\github\\globfiles\\**\\*.json`;

 

만약 globfiles에서 첫번째 폴더에서만 json 파일을 찾고 싶다면 다음과 같이 수정하면 된다.

let root = `D:\\github\\globfiles\\*\\*.json`;

 

파일 이름이 abc / ghi 로 시작하는 파일만 찾고 싶다면 다음과 같이 경로를 수정한다.

let root = `D:\\github\\globfiles\\**\\[ag][bh][ci]*.*`;


폴더만 찾기

 

파일을 제외한 폴더만 찾고 싶다면 코드를 아래와 같이 수정한다.

fs의 isDirectory 메서드를 이용하여 따로 구분하였다.

const express = require("express");
const router = express.Router();

const glob = require("glob");
const fs = require("fs");

router.get("/", (req, res) => {
  let root = `D:\\github\\globfiles\\**`;
  let folders = [];

  glob(root, function (error, findPath) {
    if (error) {
      console.log(error);
      res.send({ error });
      return;
    }

    for(let path of findPath) {
      if(fs.statSync(path).isDirectory())
        folders.push(path);
    }

    console.log(folders);
    res.send({ folders });
  });
});

module.exports = router;

 

파일을 제외한 폴더의 경로만 나오는 것을 알 수 있다.


javascript로 단순히 테스트하고 싶다면 아래와 같이 server.js를 수정하자.

const glob = require("glob");
const fs = require("fs");

let root = `D:\\github\\globfiles\\**`;
let folders = [];

glob(root, function (error, findPath) {
  if (error) {
    console.log(error);
    return;
  }

  for(let path of findPath) {
    if(fs.statSync(path).isDirectory())
      folders.push(path);
  }

  console.log(folders);
});

 

실행 결과는 다음과 같다.

$ node server.js
[
  'D:/github/globfiles',
  'D:/github/globfiles/abc1',
  'D:/github/globfiles/abc1/abc2',
  'D:/github/globfiles/abc1/abc2_2',
  'D:/github/globfiles/abc1/abc2/abc3',
  'D:/github/globfiles/def1',
  'D:/github/globfiles/ghi1',
  'D:/github/globfiles/ghi1/ghi2'
]
반응형

댓글