watch for filesystem
Watch for file changes and execute Nu code when they happen.
Signature
> watch {flags} (path) (closure)
Flags
--debounce-ms, -d {int}: Debounce changes for this many milliseconds (default: 100). Adjust if you find that single writes are reported as multiple events (deprecated)--debounce {duration}: Debounce changes for this duration (default: 100ms). Adjust if you find that single writes are reported as multiple events--glob, -g {string}: Only report changes for files that match this glob pattern (default: all files)--recursive, -r {bool}: Watch all directories under<path>recursively. Will be ignored if<path>is a file (default: true)--quiet, -q: Hide the initial status message (default: false)--verbose, -v: Operate in verbose mode (default: false)
Parameters
path: The path to watch. Can be a file or directory.closure: Some Nu code to run whenever a file changes. The closure will be passedoperation,path, andnew_path(for renames only) arguments in that order.
Input/output types:
| input | output |
|---|---|
| nothing | nothing |
| nothing | table<operation: string, path: string, new_path: string> |
Examples
Run cargo test whenever a Rust file changes
> watch . --glob=**/*.rs {|| cargo test }Watch all changes in the current directory
> watch . { |op, path, new_path| $"($op) ($path) ($new_path)"}watch (when run without a closure) can also emit a stream of events it detects.
> watch /foo/bar
| where operation == Create
| first 5
| each {|e| $"New file!: ($e.path)" }
| to text
| save --append changes_in_bar.logPrint file changes with a debounce time of 5 minutes
> watch /foo/bar --debounce 5min { |op, path| $"Registered ($op) on ($path)" | print }Note: if you are looking to run a command every N units of time, this can be accomplished with a loop and sleep
> loop { command; sleep duration }Notes
When run without a closure, watch returns a stream of events instead.