Как удалить все файлы из каталога без удаления каталога в 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();