Я пытаюсь написать сценарий node.js, который отслеживает изменения в каталоге файлов, а затем печатает файлы, которые были изменены. Как я могу изменить этот сценарий, чтобы он следил за каталогом (а не за отдельным файлом) и печатал имена файлов в каталоге по мере их изменения?
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
OSX,FSWatch
и я понятия не имею о Windoze, но уверен, что Google может вам сказать.node-inotify
в своем проекте, в конечном итоге я перешел наnode-inotify-plusplus
нее, потому что кому не нравятся абстракции? =)Ответы:
Попробуйте Чокидар :
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 решает некоторые кроссплатформенные проблемы с просмотром файлов, используя только fs.
источник
awaitWriteFinish: true
? По умолчанию это false./home/terabyte
. Ну не рекурсивноПочему бы просто не использовать старое
fs.watch
? Это довольно просто.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); })
Для получения дополнительной информации и подробностей о параметрах параметров см. Документы Node fs.
источник
fs.watch()
немного неуклюж, и вам нужно создать свою победившую реализацию противодействия.попробуй гончую :
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()
Он будет выполняться после изменения файла
источник