Bagaimana cara menghapus semua file dari direktori tanpa menghapus direktori itu sendiri menggunakan Node.js?
Saya ingin menghapus file sementara. Saya belum mahir menggunakan filesystem.
Saya telah menemukan metode ini , yang akan menghapus file dan direktori. Dalam hal itu, sesuatu seperti /path/to/directory/*
tidak akan berhasil.
Saya tidak begitu tahu perintah apa yang harus digunakan. Terima kasih untuk bantuannya.
javascript
node.js
kamu lebih baik
sumber
sumber
Jawaban:
Untuk menghapus semua file dari direktori, pertama-tama Anda perlu membuat daftar semua file di direktori menggunakan
fs.readdir
, lalu Anda dapat menggunakanfs.unlink
untuk menghapus setiap file. Jugafs.readdir
hanya akan memberikan nama file, Anda perlu menyesuaikan dengan nama direktori untuk mendapatkan path lengkap.Berikut ini contohnya
const fs = require('fs'); const path = require('path'); const directory = 'test'; fs.readdir(directory, (err, files) => { if (err) throw err; for (const file of files) { fs.unlink(path.join(directory, file), err => { if (err) throw err; }); } });
Perbarui node versi 14
Ada sebuah
recursive
flag yang dapat Anda gunakanrmdir
untuk menghapus semua file secara rekursif. Lihat dokumen nodejs untuk informasi lebih lanjut.const fs = require('fs').promises; const directory = 'test'; fs.rmdir(directory, { recursive: true }) .then(() => console.log('directory removed!'));
sumber
fs.readdirSync
,. Cukup tetapkan semua file:const files = fs.readdirSync(directory);
dan ulangi dengan cara yang samafor (const file of files) {
.Ya, ada modul fs-extra . Ada metode
.emptyDir()
di dalam modul ini yang melakukan pekerjaan itu. Berikut ini contohnya:const fsExtra = require('fs-extra') fsExtra.emptyDirSync(fileDir)
Ada juga versi asinkron dari modul ini juga. Siapapun dapat melihat tautannya.
sumber
emptyDir
fungsinya membuat direktori jika tidak ada.Ada paket yang disebut rimraf yang sangat berguna. Ini adalah perintah UNIX rm -rf untuk node.
Namun demikian, ini juga bisa menjadi terlalu kuat karena Anda dapat menghapus folder dengan sangat mudah menggunakannya. Perintah berikut akan menghapus file di dalam folder. Jika Anda menghapus *, Anda akan menghapus folder log.
const rimraf = require('rimraf'); rimraf('./log/*', function () { console.log('done'); });
https://www.npmjs.com/package/rimraf
sumber
Mengembangkan respons @ Waterscroll, jika Anda ingin menggunakan asinkron dan menunggu di node 8+:
const fs = require('fs'); const util = require('util'); const readdir = util.promisify(fs.readdir); const unlink = util.promisify(fs.unlink); const directory = 'test'; async function toRun() { try { const files = await readdir(directory); const unlinkPromises = files.map(filename => unlink(`${directory}/${filename}`)); return Promise.all(unlinkPromises); } catch(err) { console.log(err); } } toRun();
sumber
return await Promise
mubazir. Anda bisa melakukannyareturn Promise
. ThetoRun
fungsi async, jadi ketika janji dikembalikan, aplikasi dapat menunggu itu.const { promises: fs } = require('fs');
dari node 10+ saya percaya.🚀 grafik-fs
Install
Menggunakan
const {Node} = require("graph-fs"); const directory = new Node("/path/to/directory"); directory.clear(); // <--
sumber