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.log
Print 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.