Как удалить все файлы из каталога без удаления каталога в Node.js
Как удалить все файлы из каталога без удаления самого каталога с помощью Node.js?
Я хочу удалить временные файлы. Я пока не очень хорошо разбираюсь в файловых системах.
Я нашел этот метод, который удалит файлы и каталог. В этом случае что-то вроде /path/to/directory/*
не будет работать.
Я не знаю, какие команды следует использовать. Спасибо за помощь.
Ответы
Ответ 1
Чтобы удалить все файлы из каталога, сначала вам нужно перечислить все файлы в каталоге с помощью 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;
});
}
});
Ответ 2
Существует очень удобный пакет, называемый rimraf. Это команда UNIX rm -rf для узла.
Тем не менее, он может быть слишком сильным, потому что вы можете легко удалять папки с его помощью. Следующие команды будут удалять файлы внутри папки. Если вы удалите *, вы удалите папку журнала.
const rimraf = require('rimraf');
rimraf('./log/*', function () { console.log('done'); });
https://www.npmjs.com/package/rimraf
Ответ 3
Основываясь на ответе @Waterscroll, если вы хотите использовать асинхронность и ожидание в узле 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();