Estoy tratando de escribir un script node.js que observe los cambios en un directorio de archivos y luego imprima los archivos que se modifican. ¿Cómo puedo modificar este script para que observe un directorio (en lugar de un archivo individual) e imprima los nombres de los archivos en el directorio a medida que se cambian?
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
, los usos de OSXFSWatch
y no tengo idea de Windoze, pero estoy seguro de que Google podría decírselo.node-inotify
en mi proyecto, finalmente lo cambiénode-inotify-plusplus
porque ¿a quién no le gustan las abstracciones? =)Respuestas:
Prueba 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 resuelve algunos de los problemas de plataformas cruzadas con la visualización de archivos usando solo fs.
fuente
awaitWriteFinish: true
? Es falso por defecto./home/terabyte
. Bueno, no recursivo¿Por qué no usar el viejo
fs.watch
? Es bastante sencillo.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); })
Para obtener más información y detalles sobre el parámetro de opciones, consulte Node fs Docs
fuente
fs.watch()
es un poco torpe, y tienes que construir tu implementación de rebote ganado.prueba sabueso :
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()
Se ejecutará una vez que se cambie el archivo
fuente