2011-12-30 4 views
7

ho bisogno di glob ./../path/to/files/**/*.txt ma invece di ricevere le partite in questo modo:glob in Node.js e restituire solo la partita (nessun percorso che conduce)

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

ho bisogno la radice tolto:

subdir/file.txt

Attualmente, ho:

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

Ma è un po 'brutto e sembra anche avere una condizione di competizione: a volte il glob si verifica su oldwd. Quindi deve andare.

Sto valutando semplicemente la mappatura su matches e lo stripping del percorso iniziale con operazioni su stringa. Dal momento che glob restituisce le corrispondenze con i punti risolti, dovrei fare lo stesso con la mia stringa di ricerca e sostituzione, suppongo. Questo è abbastanza disordinato da chiedermi se c'è un modo migliore (built-in o libreria?) Per gestirlo.

Quindi, qual è un modo piacevole, pulito e corretto per glob in Node.js e solo ottenere la parte "corrispondente"? Javascript e CoffeeScript sono entrambi bene con me

risposta

3

Prova questa:

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

oh buona path.relative ho intenzione di provarlo subito – Rebe

+0

hmm purtroppo io sono sul nodo 0.4.xe path.relative sembra essere un'aggiunta successiva – Rebe

+0

@Rebe: Si potrebbe snip 'relativa 'fuori dalla sorgente di [' path'] (https://github.com/joyent/node/blob/master/lib/path.js). (o rinominare l'intero modulo e inserire tutto, che è probabilmente un'idea migliore) – icktoofay

12

Passo nella directory per le opzioni e hanno tutto quel casino curata da glob.

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

questa è la migliore risposta –