Node.js:跟踪目录中的新文件

时间:2013-02-28 11:03:52

标签: node.js fs

我想跟踪目录中的新文件。我使用了文档中提供的脚本:http://nodejs.org/api/fs.html#fs_fs_watch_filename_options_listener

var fs = require('fs');
fs.watch('mydir/', function (event, filename) {
    console.log('event is: ' + event);
    if (filename) {
        console.log('filename provided: ' + filename);
    } else {
        console.log('filename not provided');
    }
});

我使用mydir/将文件添加到touch hello.txt,例如。

运行脚本时,我没有获得新文件名,因为发出的事件是rename !!这是控制台输出。

event is: rename
filename not provided

如何获取文件新名称hello.txt

感谢。

3 个答案:

答案 0 :(得分:4)

同一页面也描述了您的问题:

  

每个都不支持在回调中提供filename参数   平台(目前仅支持Linux和Windows)。即使在   支持的平台文件名并不总是保证提供。

我认为最好的选择是切换到另一个提供类似功能的模块,例如watch(我对自己没有任何经验)。

答案 1 :(得分:1)



fs.watch('somedir', (event, filename) => {
})




filename此处有效,您只需跟踪第二个参数。

Mac 10.11.3,Node v5.9

答案 2 :(得分:1)

https://github.com/paulmillr/chokidar上的

chokidar 很容易设置。按照自述文件中的说明进行设置。这是我用来检测视频文件在/ video子文件夹中相对于我的Node.js应用程序根目录生成的快速示例:

  • 安装Node.js(包括NPM)
  • 生成package.json npm init
  • 将Chokidar库安装到/ node_modules子文件夹并将依赖项保存到package.json npm install chokidar --save
  • 创建示例程序文件(即触摸video.js
  • 创建要观看的文件夹(即mkdir videos
  • 将以下代码添加到video.js(如README中所述,它将监视/ videos子文件夹中的更改并忽略以句号为前缀的文件名): var chokidar = require('chokidar'); chokidar.watch('./videos', {ignored: /[\/\\]\./}).on('all', function(event, path) { console.log(event, path); });

  • 启动打印到输出的程序node video.js,表示正在观看/ videos子目录及其内容,即 $ node video.js addDir ./videos

  • 将文件(即test.mov)复制/保存到/ videos子目录中,将以下内容输出到终端中的标准输出: add videos/test.mov
  • 删除文件会将以下内容打印到终端: unlink videos/test.mov