본문 바로가기
유용한 코드 모음

스네이크 케이스로 된 파일명을 케밥 케이스로 바꾸기(node.js)

by cuziam 2023. 5. 16.

학부 때 C를 사용할 때, 습관적으로 파일명으로 스네이크 케이스를 사용했다. 최근에서야 안 것인데 자바스크립트(node.js) 코드는 카멜 케이스와 파스칼 케이스를 사용하지만, 파일명으로는 대개 케밥 케이스를 사용한다. 이 참에 파일명을 전부 케밥 케이스로 바꾸려고 한다. 

 

*혹시 헷갈리는 분을 위해 스네이크 케이스 vs 케밥 케이스

ex) 'solve problem fast.js'라는 파일명을 사용하고자 할 때.

스네이크 케이스(Snake case): 영어 소문자와 언더스코어('_')  로 이름을 붙이는 방식.

=>'solve_problem_fast.js'

케밥 케이스(Kebab case): 영어 소문자와 하이픈('-')으로 이름을 붙이는 방식.

=>'solve-problem-fast.js'

둘 다 파일명을 정하는 방식이다. 윈도우나 맥이나 파일명의 대소문자를 구분하지 않고 사용한다. 따라서 카멜케이스나 파스칼 케이스의 경우 사용하는 의미가 없기 때문에 파일명을 붙일 땐 스네이크 케이스나 케밥 케이스 중에 하나를 사용한다.


내 현재 상황

파일들이 스네이크 케이스로 작성되어 있는 상황(vs code에서 캡쳐)

JS_Datastructure_Algorithm폴더 내에 여러 js파일들이 있다. 이 폴더 안에, 스네이크 케이스로 명명된 파일들을 전부 케밥 케이스로 바꿀 것이다. snake_to_kebab.js라는 파일을 하나 만들어서 코드를 작성할 것이다.

 

전반적인 컨셉은  '-'를 '_'로 바꿔주는 것이다. 단 node_modules의 안에 파일이름은 바꾸지 않아야 한다. 


코드

const fs = require('fs');
const path = require('path');

// 대상 폴더 경로
// 코드를 퍼가서 사용하신다면 아래의 folderPath를 원하는 폴더 경로로 설정해주세요.
const folderPath = path.dirname(__filename);
console.log(`대상 폴더 경로: ${folderPath}`);

// 폴더 내의 파일 목록 가져오기
fs.readdir(folderPath, (err, files) => {
  if (err) {
    console.error(`해당 폴더를 읽을 수 없습니다`, err);
    return;
  }

  // 파일명을 케밥 케이스로 변경한다.
  files.forEach(file => {
    const sourcePath = path.join(folderPath, file);
    const targetPath = path.join(folderPath, convertToKebabCase(file));

    // 파일명 변경
    if (sourcePath !== targetPath) {
      fs.rename(sourcePath, targetPath, err => {
        if (err) {
          console.log(`파일명 변경 실패: ${file}`, err);
        } else {
          console.log(`파일명 변경 완료: ${file} -> ${path.basename(targetPath)}`);
        }
      });
    }
  });
});

// 스네이크 케이스를 케밥 케이스로 변환하는 함수
function convertToKebabCase(snakeCase) {
  return snakeCase.replace(/_/g, '-');
}

 


실행결과

'node snake-to-kebab.js'를 실행한 결과

node_modules와 package관련 파일빼고는 전부 정상적으로 변경됐다. 이런 파일은 애초에 rename을 하지 못하도록 OS에서 처리하기 때문에 건너 뛴다. 이걸로 파일명 변경완료!