Node.js - 파일, 디렉토리(하위 파일) 삭제

파일을 삭제하거나, 디렉토리를 삭제하는 방법을 소개합니다.

1. fs.unlink()로 파일 삭제

fs.unlink(file_path, callback)는 인자로 전달된 file_path 파일을 비동기적으로(async) 삭제합니다. 절대경로가 아닌 파일 이름만 전달하면, 현재 작업 경로(Working directory) 아래서 상대경로로 파일을 찾습니다. 삭제가 완료되거나 에러가 발생하면 callback이 전달됩니다.

아래와 같이 파일을 삭제할 수 있습니다.

const fs = require('fs')

fs.unlink('example.txt', err => {
  if (err) throw err;

  console.log('File is deleted.');
});

Output:

File is deleted.

1.2 fs.unlinkSync()

fs.unlinkSync(file)는 파일을 동기적으로(sync) 삭제합니다. sync이기 때문에 callback 인자는 없으며, 에러가 발생하면 unlinkSync() 안에서 발생합니다.

아래와 같이 동기적으로 파일을 삭제할 수 있습니다.

const fs = require('fs')

fs.unlinkSync('example.txt');
console.log('File is deleted.');

Output:

File is deleted.

2. fs.rmdir()으로 디렉토리 및 하위 파일 삭제

2.1 fs.rmdir()

fs.rmdir(dir_path, options, callback)는 비어있는 디렉토리나, 파일을 갖고 있는 디렉토리를 비동기적으로(async) 삭제합니다.

  • dir_path : 삭제할 폴더 경로 (상대 경로 또는 절대 경로)
  • options : 디렉토리 하위 파일들도 함께 삭제하려면 recursive: true 옵션 추가
  • callback : 작업 완료 또는 에러 발생 시 callback 전달됨

아래와 같이 test 디렉토리 및 하위 파일들을 모두 삭제할 수 있습니다.

const fs = require('fs')

fs.rmdir('test', { recursive: true }, (err) => {
  if (err) {
    console.log(err)
  } else {
    console.log('Dir is deleted.');
  }
});

Output:

Dir is deleted.

만약 recursive: true 옵션을 빼고 rmdir()을 호출하면 디렉토리 파일만 삭제할 수 있으며, 삭제하려는 디렉토리에 파일이 있을 때는 에러가 발생합니다.

[Error: ENOTEMPTY: directory not empty, rmdir 'test'] {
  errno: -39,
  code: 'ENOTEMPTY',
  syscall: 'rmdir',
  path: 'test'
}

2.2 fs.rmdirSync()

fs.rmdirSync(dir_path, options)dir_path의 디렉토리를 동기적으로(sync) 삭제합니다. 위와 동일하게 디렉토리의 하위 파일들도 모두 삭제하려면 recursive: true 옵션을 추가해야 합니다.

const fs = require('fs')

fs.rmdirSync('test', { recursive: true, force: true });
console.log('Dir is deleted.');

Output:

Dir is deleted.
Loading script...
codechachaCopyright ©2019 codechacha