node.js 파일 제거


답변:


804

사용하고 싶다고 생각합니다 fs.unlink .

자세한 내용 fs여기를 참조하십시오 .


137
POSIX 표준에서 나온 것 같습니다. 그러나 delete별명을 추가 할 수 있다고 생각합니다 !
Nick

11
rmFile
@Nick

9
@PixnBits 또는 메소드 rm가있는 경우 별명rmdir
Robin

8
Meteor 사용자의 경우fs.unlinkSync()
Erdal G.

3
나는 당신이 전체적인 예를 제공해야한다고 생각합니다. 링크는 바뀔 수 있습니다.
vasilevich

223

fs.unlink(path, callback)비동기 unlink (2) 또는 fs.unlinkSync(path)동기 unlink (2)를 호출 할 수 있습니다 . 제거하려는 파일 경로는
어디에 있습니까 path?

예를 들어 디렉토리 discovery.docx에서 파일 을 제거하려고합니다 c:/book. 그래서 내 파일 경로는 c:/book/discovery.docx입니다. 해당 파일을 제거하는 코드는

var fs = require('fs');
var filePath = 'c:/book/discovery.docx'; 
fs.unlinkSync(filePath);

64

존재 여부를 삭제하기 전에 파일을 확인하려는 경우. 따라서 대신 fs.stat 또는 fs.statSync ( Synchronous )를 사용하십시오 fs.exists. 최신 Node.js를 따라하기 때문에 문서 , fs.exists지금은 사용되지 .

예를 들면 다음과 같습니다.

 fs.stat('./server/upload/my.csv', function (err, stats) {
   console.log(stats);//here we got all information of file in stats variable

   if (err) {
       return console.error(err);
   }

   fs.unlink('./server/upload/my.csv',function(err){
        if(err) return console.log(err);
        console.log('file deleted successfully');
   });  
});

내가 존재하는지 확인하지만 다른 프로세스에 의해 차단 된 경우-또는 존재하는지 확인하고 괜찮지 만 다른 프로세스는 삭제하기 전에 임의로 프로세스를 차단합니다. 확인 후 바로 막을 수 있습니까? 차단 된 상태로 삭제할 수 없습니다.

4
fs.exists ()는 더 이상 사용되지 않지만 fs.existsSync ()는 사용되지 않습니다.
Tim

1
더 이상 사용되지 않는 이유가 있습니다. 파일을 삭제하기 전에 파일이 존재하는지 확인하면 경쟁 조건을 만드는 경우가 종종 있습니다. 대신에 호출해야 fs.unlink하며 파일이 존재하지 않으면 ENOENT콜백에 오류가 발생합니다. 연결을 해제하기 전에 확인할 필요가 없습니다.
ZachB

@ ZachB fs.unlink파일이 존재하지 않을 때 삭제 작업이 수행되는 이유 는 제거하기 전에 파일을 확인하는 것입니다.
vineet

동일한 파일을 사용 중이거나 삭제하려고 시도하는 여러 스레드 또는 프로세스가있는 경우 존재하지 않는지 확인하지 않아야합니다.이 경우 파일이 존재하는지 확인한 시간과 존재하는 시간 사이에 파일이 존재하는지 확인하는 것이 유효하지 않게됩니다. 당신은 그것을 삭제하려고합니다. unlink콜백 에서 ENOENT 오류 코드를 확인하십시오 . 해당 오류가 발생하면 파일이 존재하지 않은 것입니다. 예를 들어 Searene의 대답을보십시오.
ZachB

34

파일이 있는지 여부를 확인해야한다고 생각하지 않습니다. 파일을 확인하십시오 fs.unlink.

fs.unlink('fileToBeRemoved', function(err) {
    if(err && err.code == 'ENOENT') {
        // file doens't exist
        console.info("File doesn't exist, won't remove it.");
    } else if (err) {
        // other errors, e.g. maybe we don't have enough permission
        console.error("Error occurred while trying to remove file");
    } else {
        console.info(`removed`);
    }
});

컨트롤러에서 이전 이미지 이름을 어떻게 얻을 수 있습니까?
Chaudhary

26

이 목적을 위해 만든 작은 발췌 문장이 있습니다.

var fs = require('fs');
var gutil = require('gulp-util');

fs.exists('./www/index.html', function(exists) {
  if(exists) {
    //Show in green
    console.log(gutil.colors.green('File exists. Deleting now ...'));
    fs.unlink('./www/index.html');
  } else {
    //Show in red
    console.log(gutil.colors.red('File not found, so not deleting.'));
  }
});

4
비동기 존재는 더 이상 사용되지 않습니다 nodejs.org/api/fs.html#fs_fs_exists_path_callback
Mirodinho

2
파일을 확인한 후 fs.exists제거하기 전에 다른 사람이 파일을 삭제 하면 fs.unlink어떻게됩니까? 일어날 수 있습니다.
Searene 2012

4
링크를 해제하기 전에 파일이 존재하는지 확인하지 않아야합니다. 를 호출 unlink하고 존재하지 않는 경우 ENOENT오류를 처리하십시오 . 그렇지 않으면 경쟁 조건을 만들 수 있습니다.
ZachB

9

허용되는 답변으로 fs.unlink 파일을 삭제 데 사용하십시오.

그러나 Node.js 문서 에 따르면

사용 fs.stat()호출하기 전에 파일의 존재 여부를 확인하는 fs.open(), fs.readFile()또는fs.writeFile() 사용하지 않는 것이 좋습니다. 대신, 사용자 코드는 파일을 직접 열고 / 읽고 / 쓰고 파일을 사용할 수없는 경우 발생한 오류를 처리해야합니다.

나중에 파일을 조작하지 않고 파일이 존재하는지 확인하려면 fs.access()권장됩니다.

파일 삭제 여부를 확인하려면 fs.access대신 사용

fs.access('/etc/passwd', fs.constants.R_OK | fs.constants.W_OK, (err) => {
  console.log(err ? 'no access!' : 'can read/write');
});

이것은 Node.js 참조와 함께 좋은 대답입니다. 대부분의 사람들은 unlink파일을 삭제할 권한이 있다는 것을 알고 있기 때문에 직접 사용할 것 입니다. 그러나 fs.access삭제하기 전에 확인 해야하는 경우 좋은 대안입니다. 그러나 파일을 조작하지 않고 파일이 존재하는지 확인 해야하는 경우 자연스럽게 사용해야 fs.stat하며 fs.access겸손한 의견에 다른 목적을 가지고 있다고 생각합니다.
vdegenne

문서가 존재 여부 확인을 권장하지 않는 이유는 fs.stat / fs.access 호출과 실제 작업간에 정보가 변경 될 수 있기 때문입니다. 예를 들어, fs.access를 호출 할 때 파일이 존재하고 fs.unlink를 호출하기 전에 파일이 삭제되거나 두 호출간에 권한이 변경 될 수 있습니다. 이 경우 fs.unlink의 오류 코드를 처리해야하므로 fs.stat 또는 fs.access를 호출 할 필요가 없습니다.
Jannis Froese 2016 년

6

여기 내 코드 아래에서 잘 작동합니다.

         const fs = require('fs');
         fs.unlink(__dirname+ '/test.txt', function (err) {            
              if (err) {                                                 
                  console.error(err);                                    
              }                                                          
             console.log('File has been Deleted');                           
          });                                                            

이 답변은 연결 해제가 완료된 후 무언가를 실행하는 방법을 알고 오류 메시지 사용자 정의에 신경 쓰지 않는 사람들에게 가장 간단하고 정확하기 때문에이 답변이 가장 좋습니다.
콜린 키넌

왜 __dirname을 사용하고 있습니까? 전체 경로 대신 상대 경로를 배치 할 수 있는지 궁금합니다.
Bumpaster

6

2019 및 Node 10+가 여기 있습니다 . 달콤한 async / await 방법을 사용하는 버전 아래 .

이제 더 이상 fs.unlink약속 으로 포장 하거나 추가 패키지를 사용할 필요가 fs-extra없습니다.

네이티브 fs Promises API 만 사용하십시오 .

const fs = require('fs').promises;

(async () => {
  try {
    await fs.unlink('~/any/file');
  } catch (e) {
    // file doesn't exist, no permissions, etc..
    // full list of possible errors is here 
    // http://man7.org/linux/man-pages/man2/unlink.2.html#ERRORS
    console.log(e);
  }
})();

다음은 fsPromises.unlink 노드 문서의 사양입니다.

또한 fs.promise API는 Node 10.xx에서 실험으로 표시되었지만 (완전히 잘 작동하지만) 이후로는 실험적이지 않습니다 11.14.0.


3

del 모듈을 사용 하여 현재 디렉토리에서 하나 이상의 파일을 제거 할 수 있습니다 . 좋은 점은 현재 작업 디렉토리 이상을 삭제하지 않도록 보호한다는 것입니다.

const del = require('del');
del(['<your pathere here>/*']).then( (paths: any) => {
   console.log('Deleted files and folders:\n', paths.join('\n'));
});

여러 파일을 삭제해야하는 경우이 옵션이 좋습니다. 제안 해 주셔서 감사합니다.
사무엘 얼

2

fs.unlink (path, callback) 함수를 사용할 수 있습니다 . 다음은 "error-back"패턴을 가진 함수 래퍼의 예입니다.

// Dependencies.
const fs = require('fs');

// Delete a file.
const deleteFile = (filePath, callback) => {
  // Unlink the file.
  fs.unlink(filePath, (error) => {
    if (!error) {
      callback(false);
    } else {
      callback('Error deleting the file');
    }
  })
};


2

filename의 regexp와 일치하는 디렉토리에서 파일을 제거하십시오. fs.unlink 만 사용하여 파일을 제거하고 fs.readdir을 사용하여 디렉토리에서 모든 파일을 가져옵니다.

var fs = require('fs');
const path = '/path_to_files/filename.anyextension'; 

const removeFile = (fileName) => {
    fs.unlink(`${path}${fileName}`, function(error) {
        if (error) {
            throw error;
        }
        console.log('Deleted filename', fileName);
    })
}

const reg = /^[a-zA-Z]+_[0-9]+(\s[2-4])+\./

fs.readdir(path, function(err, items) {
    for (var i=0; i<items.length; i++) {
        console.log(items[i], ' ', reg.test(items[i]))
        if (reg.test(items[i])) {
           console.log(items[i])
           removeFile(items[i]) 
        }
    }
});

2

fs를 사용하면 매우 쉽습니다.

var fs = require('fs');
try{
 var sourceUrls = "/sampleFolder/sampleFile.txt";
 fs.unlinkSync(sourceUrls);
}catch(err){
 console.log(err);
}



-1

폴더에서 파일 / 이미지를 삭제할 수있는 코드입니다.

var fs = require('fs'); 
Gallery.findById({ _id: req.params.id},function(err,data){ 
    if (err) throw err;
    fs.unlink('public/gallery/'+data.image_name);
 });

노드 7부터 콜백 인수는 더 이상 선택 사항이 아니므로 경고가 발생합니다. 정말로 신경 쓰지 않으면 빈 함수를 전달하십시오.
jlh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.