2013-02-17 16 views
20

से मेल खाने वाली फ़ाइलों को हटाएं (अनलिंक करें) मैं एक रेगेक्स से मेल खाने वाली निर्देशिका से कई फाइलों को हटाना चाहता हूं। कुछ इस तरह:रेगेक्स

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

unlink के बाद से regexes का समर्थन नहीं करता, मैं इस के बजाय का उपयोग कर रहा:

var fs = require('fs'); 

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

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

जो काम करता है, लेकिन IMO एक छोटे से अधिक जटिल की तुलना में यह होना चाहिए ।


क्या रेगेक्स से मेल खाने वाली फ़ाइलों को हटाने के लिए एक बेहतर अंतर्निहित तरीका है (या यहां तक ​​कि केवल वाइल्डकार्ड का उपयोग करें)?

+2

उचित लगता है। यह अत्यधिक जटिल प्रतीत होता है? – loganfsmyth

+2

@loganfsmyth - क्योंकि मैं चाहता हूं * यह आसान हो? :) –

+4

डाउनवोट क्यों? –

उत्तर

9

आप ग्लोब पर गौर कर सकते https://npmjs.org/package/glob

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

ग्लोब आंतरिक minimatch उपयोग करता है। यह ग्लोब अभिव्यक्ति को जावास्क्रिप्ट RegExp ऑब्जेक्ट्स में परिवर्तित करके काम करता है। https://github.com/isaacs/minimatch

आप कॉलबैक में मिलान की गई फ़ाइलों के साथ जो कुछ भी चाहते हैं (या लौटा ऑब्जेक्ट globSync के मामले में) कर सकते हैं।

+0

+1 धन्यवाद, लेकिन मैं एक अंतर्निहित समाधान की तलाश में हूं; मुझे नहीं लगता कि यह मेरी परियोजना के लिए एक और निर्भरता पेश करने का औचित्य साबित करता है। यदि कोई बेहतर देशी समाधान नहीं है, तो मुझे लगता है कि पोस्ट किया गया कोड मुझे ठीक से सेवा देगा। –

+1

फॉलो अप के रूप में (हालांकि कुछ महीने देर हो चुकी है), नोड.जेएस में "फ़ंक्शंस में निर्मित" का उपयोग करके चीजें करना चाहते हैं, यह काफी नोड.जेएस तरीका नहीं है।यह विशेष रूप से 'npm' के साथ बंडल किया गया है क्योंकि 'npm install glob --save' (इस मामले में) का उपयोग करके एक नई लाइब्रेरी जोड़ने के लिए अविश्वसनीय रूप से आसान है। नोड.जेएस विकास के लिए, "एनपीएम के माध्यम से" और "निर्मित" लगभग वही बात है। –

0

उत्तर आपके पर्यावरण पर निर्भर हो सकता है। ऐसा लगता है कि आप node.js. पर चल रहे हैं Node.js प्रलेखन की त्वरित जानकारी से पता चलता है कि ऐसा करने के लिए कोई "अंतर्निहित" तरीका नहीं है, यानी, कोई भी फ़ंक्शन कॉल नहीं है जो आपके लिए यह करेगा। अगली सबसे अच्छी चीज़ में फ़ंक्शन कॉल की एक छोटी संख्या शामिल हो सकती है। जैसा कि मैंने अपनी टिप्पणी में लिखा था, मुझे नहीं लगता कि आपके सुझाए गए उत्तर को मानक node.js फ़ंक्शन कॉल पर भरोसा करने का कोई आसान तरीका है। यही है, अगर मैं आपके जूते में था, तो मैं आपके द्वारा पहले से सुझाए गए समाधान के साथ जाऊंगा (हालांकि थोड़ा साफ हो गया है)।

एक वैकल्पिक खोल लिए जाने के लिए,,

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

व्यक्तिगत रूप से, मैं दृढ़ता से इस गॉबल्डीगुक पर अपने पेशकश समाधान पसंद करेंगे है उदाहरण के लिए, लेकिन हो सकता है आप कुछ अलग के लिए शूटिंग कर रहे हैं।

1

मेरे पास ऐसा करने का एक बहुत ही सरल समाधान है। Fs.readdir API का उपयोग कर node.js में निर्देशिका पढ़ें। यह निर्देशिका में सभी फाइलों की एक सरणी देगा। एक बार आपके पास उस सरणी के बाद, लूप के लिए इसका उपयोग करके इसे फिर से करें, regex लागू करें। नीचे दिया गया कोड "एन" और एक्सटेंशन ".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]); 
    } 
}); 
+3

यह प्रश्न में कोड से अलग कैसे है? –