2012-12-04 15 views
33

Dosya dizinindeki değişiklikleri izleyen bir node.js komut dosyası yazmaya çalışıyorum ve sonra değiştirilen dosyaları yazdırıyor . Bu betiği bir dizini (tek bir dosya yerine) izleyecek şekilde nasıl değiştirebilirim ve dizindeki dosyaların isimlerini değiştirildikçe yazdırır?node.js kullanılarak yapılan değişiklikler için bir klasör izleyin ve bunlar değiştirildikten sonra dosya yollarını yazdırın

var fs = require('fs'), 
    sys = require('sys'); 
var file = '/home/anderson/Desktop/fractal.png'; //this watches a file, but I want to watch a directory instead 
fs.watchFile(file, function(curr, prev) { 
    alert("File was modified."); //is there some way to print the names of the files in the directory as they are modified? 
}); 
+0

bkz: http://stackoverflow.com/questions/12063266/how-do-you-watch-multiple -files-ama-sadece-run-görev-on-değiştirilmiş-dosya-in-grunt-js (Ben gruntjs aşina değilim, - Umarım başka çözümler vardır.) –

+0

Belki de node-inotify-plusplus gibi bir şey yararlı olurdu: http://stackoverflow.com/questions/5877263/monitoring-directory-for-changes-potential-high-memory –

+0

Hangi işletim sistemini kullanıyorsunuz? Bu, Unix/Linux'un 'inotify', OSX'in FSWatch kullanması ve Windoze hakkında hiçbir fikrim olmaması nedeniyle bir dosyayı izlemek için düşük seviyeli mekanizmalar kadar önemlidir, ancak eminim Google size söyleyebilir. – srquinn

cevap

65

Chokidar deneyin:

var chokidar = require('chokidar'); 

var watcher = chokidar.watch('file or dir', {ignored: /^\./, persistent: true}); 

watcher 
    .on('add', function(path) {console.log('File', path, 'has been added');}) 
    .on('change', function(path) {console.log('File', path, 'has been changed');}) 
    .on('unlink', function(path) {console.log('File', path, 'has been removed');}) 
    .on('error', function(error) {console.error('Error happened', error);}) 

Chokidar sadece fs kullanarak dosyaları izlerken crossplatform bazı sorunları çözer.

+1

Alt klasörleri işliyor mu? –

+0

evet! –

9

hound deneyin:

hound = require('hound') 

// Create a directory tree watcher. 
watcher = hound.watch('/tmp') 

// Create a file watcher. 
watcher = hound.watch('/tmp/file.txt') 

// Add callbacks for file and directory events. The change event only applies 
// to files. 
watcher.on('create', function(file, stats) { 
    console.log(file + ' was created') 
}) 
watcher.on('change', function(file, stats) { 
    console.log(file + ' was changed') 
}) 
watcher.on('delete', function(file) { 
    console.log(file + ' was deleted') 
}) 

// Unwatch specific files or directories. 
watcher.unwatch('/tmp/another_file') 

// Unwatch all watched files and directories. 
watcher.clear() 

Bu dosya değişikliği

5

zamanlar Neden sadece eski fs.watch kullanmak çalıştırır? Oldukça basit. Bu alakalı olup olmadığını

seçenekleri param hakkında daha fazla bilgi ve ayrıntılar için
fs.watch('/path/to/folder', (eventType, filename) => { 
console.log(eventType); 
// could be either 'rename' or 'change'. new file event and delete 
// also generally emit 'rename' 
console.log(filename); 
}) 

acaba Node fs Docs

+0

işleniyor Uyarı notu, bunu kendi Mac'imde test ettim ve bu kod yalnızca klasör düzeyini ve değişikliklerin alt dizinlerini algılamıyor. Bu nedenle, ikinci parametre olarak yinelemeli olarak izleme seçeneğini eklediğinizden emin olun; – OzzyTheGiant

+0

'un yukarısındaki belgelere bakın. @ OzzyTheGiant'ın Notuna Not: Yinelemeli seçenek yalnızca MacOS ve Windows'ta desteklenir. –

İlgili konular