Использование fs.watch в каталоге, похоже, не замечает добавленные файлы. - PullRequest
0 голосов
/ 04 марта 2020

Когда я использую fs.watch для каталога: https://nodejs.org/docs/latest/api/fs.html#fs_fs_watch_filename_options_listener

, он не замечает новые файлы, добавленные в каталог после вызова fs.watch .. Я нахожусь Linux - есть ли какой-то вызов, который мне нужно сделать, чтобы он заметил новые добавленные / удаленные файлы?

единственными событиями в возвращаемом объекте FSWatcher являются «изменение», «ошибка» и «закрытие» - есть «добавить» или «удалить» для файлов.

interface FSWatcher extends events.EventEmitter {
    close(): void;

    /**
     * events.EventEmitter
     *   1. change
     *   2. error
     */
    addListener(event: string, listener: (...args: any[]) => void): this;
    addListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
    addListener(event: "error", listener: (error: Error) => void): this;
    addListener(event: "close", listener: () => void): this;

    on(event: string, listener: (...args: any[]) => void): this;
    on(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
    on(event: "error", listener: (error: Error) => void): this;
    on(event: "close", listener: () => void): this;

    once(event: string, listener: (...args: any[]) => void): this;
    once(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
    once(event: "error", listener: (error: Error) => void): this;
    once(event: "close", listener: () => void): this;

    prependListener(event: string, listener: (...args: any[]) => void): this;
    prependListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
    prependListener(event: "error", listener: (error: Error) => void): this;
    prependListener(event: "close", listener: () => void): this;

    prependOnceListener(event: string, listener: (...args: any[]) => void): this;
    prependOnceListener(event: "change", listener: (eventType: string, filename: string | Buffer) => void): this;
    prependOnceListener(event: "error", listener: (error: Error) => void): this;
    prependOnceListener(event: "close", listener: () => void): this;
}

1 Ответ

0 голосов
/ 04 марта 2020

Nevermind - fs.watch видит удаление / добавление / создание / несвязанных файлов. Моя ошибка состояла только в передаче путей к файлу в fs.watch вместо передачи каталогов. Лучше просто пропустить каталоги. Чтобы выполнить что-то похожее на fs.watch на Linux, вы можете использовать:

 inotifywait -m /path/one -m /path/two -m /path/three -e create \
           -e moved_to -e modify -e moved_from \
           -e move -e create -e delete -e delete_self
...