2011-12-30 7 views
7

मैं ./../path/to/files/**/*.txt लेकिन इसके बजाय इस तरह के मैचों को प्राप्त करने के glob के लिए की जरूरत है:ग्लोब और केवल मैच लौट (कोई प्रमुख पथ)

./../path/to/files/subdir/file.txt

मैं जड़ की जरूरत बंद छीन लिया:

subdir/file.txt

वर्तमान में, मेरे पास है:

oldwd = process.cwd() 
process.chdir(__dirname + "/../path/to/files") 
glob.glob("**/*.txt", function (err, matches) { 
    process.chdir(oldwd) 
}); 

लेकिन यह थोड़ा बदसूरत है और ऐसा लगता है कि दौड़ की स्थिति भी होती है: कभी-कभी ग्लोब पुराने पर ग्लोब होता है। तो उसे जाना है।

मैं बस matches पर मैपिंग पर विचार कर रहा हूं और स्ट्रिंग ऑपरेशंस के साथ अग्रणी पथ को अलग कर रहा हूं। चूंकि ग्लोब रिटर्न डॉटडिर्स के साथ मेल खाता है, इसलिए मुझे लगता है कि मुझे अपनी खोज-और-प्रतिस्थापन स्ट्रिंग में ऐसा करना होगा, मुझे लगता है। यह सिर्फ इतना गन्दा हो रहा है कि मुझे आश्चर्य है कि अगर इसे संभालने के लिए बेहतर (अंतर्निर्मित या पुस्तकालय?) तरीका है।

तो, नोड.जेएस और में ग्लोब करने के लिए एक अच्छा, साफ और सही तरीका क्या है "मिलान" भाग प्राप्त करें? जावास्क्रिप्ट और CoffeeScript दोनों मेरे साथ ठीक

उत्तर

3

इस प्रयास करें हैं: विकल्प के लिए निर्देशिका में

var path = require('path'); 
var root = '/path/to/files'; 
glob.glob("**/*.txt", function(err, matches) { 
    if(err) throw err; 
    matches = matches.map(function(match) { 
     return path.relative(root, match); 
    }); 
    // use matches 
}); 
+0

ओह अच्छा एक path.relative मैं इसे करने की कोशिश करने जा रहा हूँ अब – Rebe

+0

हम्म दुर्भाग्य से मैं नोड 0.4.x और path.relative पर हूँ एक बाद इसके अलावा – Rebe

+0

@Rebe हो रहा है: आप 'कटाव सकता रिश्तेदार '[पथ 'स्रोत से बाहर] (https://github.com/joyent/node/blob/master/lib/path.js)। (या पूरे मॉड्यूल का नाम बदलें और सभी में खींचें, जो शायद एक बेहतर विचार है) – icktoofay

12

दर्रा और ग्लोब द्वारा के सभी कि गंदगी ध्यान रखा है।

glob.glob("**/*.txt", {cwd: '../../wherever/'}, function(err, matches) { 
    ... 
}); 
+0

यह सबसे अच्छा जवाब है –

संबंधित मुद्दे