Подтвердить что ты не робот

Удалить (unlink) файлы, соответствующие регулярному выражению

Я хочу удалить несколько файлов из каталога, соответствующих регулярному выражению. Что-то вроде этого:

// WARNING: not real code
require('fs').unlink(/script\.\d+\.js$/);

Так как unlink не поддерживает регулярные выражения, я использую это вместо:

var fs = require('fs');

fs.readdir('.', (error, files) => {
    if (error) throw error;

    files.filter(name => /script\.\d+\.js$/.test(name)).forEach(fs.unlink);
});

который работает, но IMO немного сложнее, чем должно быть.


Есть ли лучший встроенный способ удаления файлов, которые соответствуют регулярному выражению (или даже просто использовать подстановочные знаки)?

4b9b3361

Ответ 1

Вы можете посмотреть в glob https://npmjs.org/package/glob

require("glob").glob("*.txt", function (er, files) { ... });
//or
files = require("glob").globSync("*.txt");

glob внутренне использует минимизацию. Он работает, преобразовывая выражения glob в объекты JavaScript RegExp. https://github.com/isaacs/minimatch

Вы можете делать все, что захотите, с соответствующими файлами в обратном вызове (или в случае globSync возвращаемого объекта).

Ответ 2

Ответ может зависеть от вашей среды. Похоже, вы работаете на node.js. Быстрое прочтение документации node.js предполагает, что для этого не существует "встроенного" способа, т.е. Не существует ни одного вызова функции, который сделает это для вас. Следующее лучшее может включать небольшое количество вызовов функций. Как я писал в своем комментарии, я не думаю, что есть простой способ сделать ваш предложенный ответ более кратким, просто полагаясь на стандартные вызовы функций node.js. То есть, если бы я был на вашем месте, я бы пошел с решением, которое вы уже предложили (хотя и слегка очищенным).

Одна альтернатива - перейти к оболочке, например,

var exec = require('child_process').exec;
exec('ls | grep "script[[:digit:]]\\\+.js" | xargs rm');

Лично я бы предпочел ваше предложенное решение над этим gobbledygook, но, возможно, вы стреляете в нечто другое.

Ответ 3

У меня очень простое решение для этого. Прочитайте каталог в node.js с помощью API fs.readdir. Это даст массив из всех файлов в каталоге. После того, как у вас есть этот массив, повторите его, используя цикл for, примените регулярное выражение. В приведенном ниже коде будут удалены все файлы, начинающиеся с "en" и расширения ".js"

fs.readdir('.', (err, files)=>{
   for (var i = 0, len = files.length; i < len; i++) {
      var match = files[i].match(/en.*.js/);
      if(match !== null)
          fs.unlink(match[0]);
   }
});