¿Cómo eliminar todos los archivos de un directorio sin eliminar un directorio en sí usando Node.js?
Quiero eliminar archivos temporales. Todavía no soy bueno con los sistemas de archivos.
Encontré este método, que eliminará archivos y el directorio. En eso, algo como /path/to/directory/*
no funcionará.
Realmente no sé qué comandos debería usar. Gracias por la ayuda.
javascript
node.js
Tú mejor no
fuente
fuente
Respuestas:
Para eliminar todos los archivos de un directorio, primero debe enumerar todos los archivos del directorio usando
fs.readdir
, luego puede usarfs.unlink
para eliminar cada archivo. Tambiénfs.readdir
le dará solo los nombres de los archivos, necesita concatizar con el nombre del directorio para obtener la ruta completa.Aquí hay un ejemplo
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; }); } });
Actualizar la versión 14 del nodo
Hay una
recursive
bandera que puede utilizarrmdir
para eliminar todos los archivos de forma recursiva. Consulte la documentación de nodejs para obtener más información.const fs = require('fs').promises; const directory = 'test'; fs.rmdir(directory, { recursive: true }) .then(() => console.log('directory removed!'));
fuente
fs.readdirSync
. Simplemente asigne todos los archivos:const files = fs.readdirSync(directory);
y repita de la misma manerafor (const file of files) {
.Sí, hay un módulo fs-extra . Hay un método
.emptyDir()
dentro de este módulo que hace el trabajo. Aquí hay un ejemplo:const fsExtra = require('fs-extra') fsExtra.emptyDirSync(fileDir)
También hay una versión asincrónica de este módulo. Cualquiera puede consultar el enlace.
fuente
emptyDir
función crea el directorio si no existe.Hay un paquete llamado rimraf que es muy útil. Es el comando de UNIX rm -rf para node.
Sin embargo, también puede ser demasiado poderoso porque puede eliminar carpetas muy fácilmente usándolo. Los siguientes comandos eliminarán los archivos dentro de la carpeta. Si elimina el *, eliminará la carpeta de registro.
const rimraf = require('rimraf'); rimraf('./log/*', function () { console.log('done'); });
https://www.npmjs.com/package/rimraf
fuente
Sobre la base de la respuesta de @ Waterscroll, si desea usar async y esperar en el nodo 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();
fuente
return await Promise
es redundante. Puedes simplemente hacerreturn Promise
. LatoRun
función es asincrónica, por lo que cuando se devuelve una promesa, la aplicación puede esperarla.const { promises: fs } = require('fs');
desde el nodo 10+, creo.🚀 gráfico-fs
Instalar en pc
Utilizar
const {Node} = require("graph-fs"); const directory = new Node("/path/to/directory"); directory.clear(); // <--
fuente