Как удалить все файлы из каталога, не удаляя сам каталог с помощью Node.js?
Я хочу удалить временные файлы. Я пока плохо разбираюсь в файловых системах.
Я нашел этот метод, который удалит файлы и каталог. В этом что-то вроде /path/to/directory/*
не сработает.
Я действительно не знаю, какие команды следует использовать. Спасибо за помощь.
javascript
node.js
ты лучше
источник
источник
Ответы:
Чтобы удалить все файлы из каталога, сначала вам нужно перечислить все файлы в каталоге с помощью
fs.readdir
, затем вы можете использоватьfs.unlink
для удаления каждого файла. Такжеfs.readdir
будут указаны только имена файлов, вам нужно объединить с именем каталога, чтобы получить полный путь.Вот пример
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; }); } });
Обновить узел версии 14
Есть
recursive
флаг, который можно использоватьrmdir
для рекурсивного удаления всех файлов. См. Документацию nodejs для получения дополнительной информации.const fs = require('fs').promises; const directory = 'test'; fs.rmdir(directory, { recursive: true }) .then(() => console.log('directory removed!'));
источник
fs.readdirSync
. Просто назначьте все файлы:const files = fs.readdirSync(directory);
и выполните цикл таким же образомfor (const file of files) {
.Да, есть модуль fs-extra .
.emptyDir()
Внутри этого модуля есть метод, который выполняет эту работу. Вот пример:const fsExtra = require('fs-extra') fsExtra.emptyDirSync(fileDir)
Также существует асинхронная версия этого модуля. Любой желающий может проверить ссылку.
источник
emptyDir
функция создает каталог, если он не существует.Есть очень удобный пакет под названием римраф. Это команда UNIX rm -rf для узла.
Тем не менее, он также может быть слишком мощным, потому что с его помощью вы можете очень легко удалять папки. Следующие команды удалят файлы внутри папки. Если вы удалите *, вы удалите папку журнала.
const rimraf = require('rimraf'); rimraf('./log/*', function () { console.log('done'); });
https://www.npmjs.com/package/rimraf
источник
Основываясь на ответе @ Waterscroll, если вы хотите использовать async и ждать в узле 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();
источник
return await Promise
является избыточным. Вы можете просто сделатьreturn Promise
.toRun
Функция асинхронная, поэтому , когда обещание возвращается, приложение может ждать на этом.const { promises: fs } = require('fs');
Я считаю, что теперь вы можете использовать с узла 10+.🚀 граф-фс
Установить
Использовать
const {Node} = require("graph-fs"); const directory = new Node("/path/to/directory"); directory.clear(); // <--
источник