Supprimer (unlink) les fichiers correspondant à regex
Je veux supprimer plusieurs fichiers à partir d'un répertoire, correspondant à une expression régulière. Quelque chose comme ceci:
//WARNING: not real code
require('fs').unlink(/script\.\d+\.js$/);
Depuis unlink
ne supporte pas les regexes, je suis en utilisant ce lieu:
var fs = require('fs');
fs.readdir('.', (error, files) => {
if (error) throw error;
files.filter(name => /script\.\d+\.js$/.test(name)).forEach(fs.unlink);
});
qui fonctionne, mais l'OMI est un peu plus complexe que ce qu'elle devrait être.
Est-il un meilleur moyen intégré pour supprimer les fichiers qui correspondent à une expression régulière (ou même simplement utiliser des caractères génériques)?
- Semble raisonnable. Ce fait semble trop complexe?
- Parce que je veux qu'il soit plus simple? 🙂
- Je soupçonne que le downvote est parce que vous êtes essentiellement en posant une question et y répondre vous-même. Personnellement, je pense que ton code est sympa et assez concis. Trop beaucoup plus concis et il pourrait réellement commencer à obscurcir la fonctionnalité. Je venais de modulariser, en passant les regex et le nom du répertoire en tant qu'arguments. Un upvote pour vous, monsieur!
- Je ne demande pas pour tout le monde de revoir mon code (je l'ai publié sur codereview pour cela). Je me demande si il y a un meilleur moyen intégré pour accomplir cette tâche.
Vous devez vous connecter pour publier un commentaire.
Vous pouvez regarder dans les glob https://npmjs.org/package/glob
glob utilise en interne minimatch. Il fonctionne en convertissant glob expressions JavaScript RegExp objets. https://github.com/isaacs/minimatch
Vous pouvez faire ce que vous voulez avec les fichiers correspondants dans le rappel (ou en cas de globSync l'objet retourné).
npm
précisément parce qu'il est incroyablement facile d'ajouter une nouvelle bibliothèque à l'aide denpm install glob --save
(dans ce cas). Pour Node.js de développement", à travers des mnp" et "intégrée" sont pratiquement la même chose.J'ai une solution très simple à faire. Lire le répertoire dans node.js à l'aide de fs.readdir API. Cela permettra de donner un tableau de tous les fichiers dans le répertoire. Une fois que vous avez ce tableau, parcourir à l'aide de la boucle, d'appliquer des regex.
Le code ci-dessous va supprimer tous les fichiers commençant par "fr" et l'extension ".js"
Non, il n'est pas d'expansion dans le Nœud de bibliothèques. Si vous ne voulez pas tirer quelque chose de MNP alors ne vous inquiétez pas, il prend juste une ligne de code. Mais lors de mes tests, le code fourni dans d'autres réponses pour la plupart ne fonctionnent pas. Voici donc mon fragment de code, de les tester, de travail, de la pure natif Nœud et JS.
La réponse dépend de votre environnement. On dirait que vous êtes en cours d'exécution sur node.js. Une rapide lecture de l'node.js la documentation suggère il n'est pas "intégrée" façon de le faire, c'est à dire, il n'y a pas un seul appel de fonction le fera pour vous. La prochaine meilleure chose qui pourrait impliquer un petit nombre d'appels de fonction. Comme je l'ai écrit dans mon commentaire, je ne pense pas qu'il y a une façon facile de faire votre proposition de réponse beaucoup plus courts, simplement en s'appuyant sur la norme node.js les appels de fonction. C'est, si j'étais à votre place, j'irais avec la solution que vous avez déjà suggéré (bien que légèrement nettoyé).
Une alternative est d'aller à la coquille, par exemple,
Personnellement, je préfère largement votre solution proposée sur ce charabia, mais peut-être que vous êtes de chasse pour quelque chose de différent.