J'essaie d'écrire un script node.js qui surveille les changements dans un répertoire de fichiers, puis imprime les fichiers qui sont modifiés. Comment puis-je modifier ce script pour qu'il surveille un répertoire (au lieu d'un fichier individuel) et imprime les noms des fichiers dans le répertoire au fur et à mesure qu'ils sont modifiés?
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?
});
inotify
, OSXFSWatch
et je n'ai aucune idée de Windoze mais je suis sûr que Google pourrait vous le dire.node-inotify
dans mon projet, je suis finalement passé ànode-inotify-plusplus
parce que qui n'aime pas les abstractions? =)Réponses:
Essayez Chokidar :
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 résout certains des problèmes de multiplateforme en regardant des fichiers en utilisant uniquement fs.
la source
awaitWriteFinish: true
? C'est faux par défaut./home/terabyte
. Eh bien pas récursifPourquoi ne pas simplement utiliser l'ancien
fs.watch
? C'est assez simple.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); })
Pour plus d'informations et de détails sur le paramètre d'options, consultez Node fs Docs
la source
fs.watch()
est un peu maladroit, et vous devez construire votre implémentation anti-rebond gagnée.essayez chien :
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()
Il s'exécutera une fois le fichier modifié
la source