Skip to content

Node.js에서 폴더 다루기

Node.js fs 코어 모듈은 폴더 작업을 하는 데 사용할 수 있는 많은 편리한 메서드를 제공합니다.

폴더가 있는지 확인

fs.access() (및 프로미스 기반 대응 함수인 fsPromises.access())를 사용하여 폴더가 있는지 확인하고 Node.js가 해당 권한으로 폴더에 접근할 수 있는지 확인합니다.

javascript
const fs = require('node:fs');

try {
  await fs.promises.access('/Users/joe');
} catch (err) {
  throw err;
}

새 폴더 만들기

fs.mkdir() 또는 fs.mkdirSync() 또는 fsPromises.mkdir()을 사용하여 새 폴더를 만듭니다.

javascript
const fs = require('node:fs');
const folderName = '/Users/joe/test';

try {
  fs.mkdirSync(folderName);
} catch (err) {
  console.error(err);
}

디렉토리 내용 읽기

fs.readdir() 또는 fs.readdirSync() 또는 fsPromises.readdir()을 사용하여 디렉토리 내용을 읽습니다.

다음 코드는 폴더의 내용(파일 및 하위 폴더 모두)을 읽고 상대 경로를 반환합니다.

javascript
const fs = require('node:fs');
const folderPath = '/Users/joe';
fs.readdirSync(folderPath).map(fileName => {
  return path.join(folderPath, fileName);
});

전체 경로를 얻을 수 있습니다.

javascript
fs.readdirSync(folderPath)
  .map(fileName => path.join(folderPath, fileName));

또한 폴더를 제외하고 파일만 반환하도록 결과를 필터링할 수도 있습니다.

javascript
const fs = require('node:fs');
const isFile = fileName => !fileName.includes(path.sep);

fs.readdirSync(folderPath)
  .map(fileName => path.join(folderPath, fileName))
  .filter(isFile);

폴더 이름 바꾸기

fs.rename() 또는 fs.renameSync() 또는 fsPromises.rename()을 사용하여 폴더 이름을 바꿉니다. 첫 번째 매개변수는 현재 경로이고 두 번째 매개변수는 새 경로입니다.

javascript
const fs = require('node:fs');
fs.rename('/Users/joe', '/Users/roger', err => {
  if (err) {
    console.error(err);
  }
});

fs.renameSync()는 동기 버전입니다.

javascript
const fs = require('node:fs');
try {
  fs.renameSync('/Users/joe', '/Users/roger');
} catch (err) {
  console.error(err);
}

fsPromises.rename()는 프로미스 기반 버전입니다.

javascript
const fs = require('node:fs/promises');
async function example() {
  try {
    await fs.rename('/Users/joe', '/Users/roger');
  } catch (err) {
    console.log(err);
  }
}
example();

폴더 삭제하기

폴더를 삭제하려면 fs.rmdir() 또는 fs.rmdirSync() 또는 fsPromises.rmdir()을 사용하세요.

javascript
const fs = require('node:fs');
fs.rmdir(dir, err => {
  if (err) {
    throw err;
  }
  console.log(`${dir} is deleted!`);
});

내용물이 있는 폴더를 삭제하려면 fs.rm(){ recursive: true } 옵션과 함께 사용하여 내용물을 재귀적으로 제거하세요.

{ recursive: true, force: true }는 폴더가 존재하지 않는 경우 예외를 무시하도록 만듭니다.

javascript
const fs = require('node:fs');
fs.rm(dir, { recursive: true, force: true }, err => {
  if (err) {
    throw err;
  }
  console.log(`${dir} is deleted!`);
});