본문 바로가기

TOPIC

js로 현재파일의 모든폴더 조회하고 이동링크 파일 생성하기

반응형

최근에 스터디를 위해서 깃 저장소를 만들었다.

 

많은 인원들이 폴더를 생성하고 파일을 작성하는데 md파일을 그 대마다 수정해서 이동경로를 만드는것에 한계를 느꼈다.

 

간단한 깊이 우선탐색을 이용해서 구현해보았다.

 

그래서 js로 간단하게 md파일의 인덱스를 만들어 주는 것을 만들고자 하였다 bb

 

 

 

결과 파일이다.

 

자그럼 js코드를 보겠다.

 

주의할점은 파일 하나에 모든 소스를 적당보니 소스가 분리되어 있지는 않다.

 

const fs = require('fs');

/*
** 무시하고 싶은 폴더의 이름을 확장자명 까지 써주세요 :)
*/
const ignores = ['README.md','image','node_modules','writerReadme.js','package-lock.json','package.json','.git','.gitignore'];
const baseTagCount = 2;
let text;

const idDir = (stream) => {
    return fs.lstatSync(stream).isDirectory();
};

const createTage = (count, tag) => {
    return Array(count * 2).fill(tag).join('');
};

const searchDirectory = (__dirname, deeps) => {

    let filelist = fs.readdirSync(__dirname);

    filelist = filelist.filter((name) => {
        return ignores.every((ignore) => ignore !== name);
    });

    // TODO : 정렬을 해야합니다. 파일을 앞쪽으로 디렉토리를 뒤쪽으로~
    // idDir를 이용해서 변경해주세요 ㅎㅎ..

    filelist.forEach((name) => {
        if(!idDir(`${__dirname}/${name}`)) {
            text += `${createTage(deeps, ' ')}- [${name}](${__dirname}/${name})\n`;

        }else {
            text += `${createTage(deeps, ' ')}- ### ${name}\n`;
            searchDirectory(`${__dirname}/${name}`, deeps + 1);
        }
    });

}

const init = () => {
    text = '# 우리의 스터디 공부일지\n';
};

const writeFile = () => {
    text +=
`
# 저장공간 README.md 업데이트 방법.
- node 16 LTS 버전을 다운한다.
- npm install 한다.
- npm start 를 실행한다.
- 이상 즐겁게 공부하다 :)
`;
    fs.unlinkSync('README.md');
    fs.writeFileSync('README.md', text);
}

const main = () => {
    init();
    searchDirectory('.', 0);
    writeFile();
};

main();

 

이용방법은 최상단 디렉토리에 현재 js파일을 추가한다.

그리고 ignore 변수에 인덱스에 추가하고 싶은 않은 애들을 추가한다.

 

현재는 마크다운 파일을 기준으로 인덱스가 설정되어있는데 현재코드를 기반으로 html xml등 파일이 작성 가능하다.

 

node fs를 사용해서 추가하니 본인의 취향대로 파일을 변경해서 사용하면 좋을것 같다.

 

깃허브 링크는 여기다 ㅎㅎ

https://github.com/Hongjeongmin/study_room

 

GitHub - Hongjeongmin/study_room: 함께해요 스터디~

함께해요 스터디~. Contribute to Hongjeongmin/study_room development by creating an account on GitHub.

github.com

 

반응형