An attempt to resurrect incron
but in rust.
Run cargo install rsincron
.
rsincrontab
Tool to manage your watches. Usage:
bash
rsincrontab <mode>
where mode is one of edit
, list
or remove
.
Opens a temp file with your $EDITOR
(if not found defaults to /usr/bin/vi
)
to edit/add new rsincrons. The format used is:
<path-to-folder-or-file> <MASKS,ATTRS> <command-to-execute ARGS>
you can use either spaces or tabs to separate the fields. The supplied command
command gets run with bash -c "$COMMAND"
. Lines starting with a #
get
treated as comment.
man incrontab.5
)A file/folder can be watched for following events (specify them comma
separated only; no spaces or tabs )
- * IN_ACCESS
; File was accessed (read)
- * IN_ATTRIB
; Metadata changed (permissions, timestamps, attributes, etc..)
- * IN_CLOSE_WRITE
; File opened for writing was closed
- * IN_CLOSE_NOWRITE
; File not opened for writing was closed
- * IN_CREATE
; File/directory created in watched directory
- * IN_DELETE
; File/directory deleted from watched directory
- IN_DELETE_SELF
; Watched file/directory was itself deleted
- * IN_MODIFY
; File was modified
- IN_MOVE_SELF
; Watched file/directory was itself moved
- * IN_MOVED_FROM
; File moved out of watched directory
- * IN_MOVED_TO
; File moved into watched directory
- * IN_OPEN
; File was opened
events marked with an asterisk trigger, when watching a folder, for files in the watched category.
Specify them together with the masks, also comma separated only
- recursive=true
; whether to recursively add watches in subdirectory or keep
only the root one
You can use following placeholders to pass information regarding the event to
the supplied command:
- $$
-> single $
- $@
-> path being watched
- $#
-> filename that triggered the event; '' if event is triggered by
watched folder
- $%
-> triggered event masks as text
- $&
-> triggered event masks as bits
Lists only lines parsed lines without errors. A logfile, per default
/var/log/rsincron.log
will contain details about incorrect input supplied.
Deletes user's rsincron.table
(per default
$HOME/.local/share/rsincron.table
).
rsincrond
Simply run rsincrond
. The program doesn't background itself.
Both rsincrond
and rsincrontab
look for a configuration file located under
$HOME/.config/rsincron.toml
.
```toml
watchtable = "$HOME/.local/share/rsincron.table" polltime = 1000 # time [ms] between health loop iteractions
[logging]
file = "/var/log/rsincron.log" # logfile path
stdout = true # if logging has to go also to standart output
level = "warn" # loglevel
Every poll_time ms
the program checks in recursive=true
watched folders for
contained folders not having the same watch on. Adds to the active watches any
inactive folders found.
[ ] rsincrontab
: incrontab
's sibling
[ ] rsincrond
: the daemon itself
rsincrontab
)[ ] write every single type of test
Some sort of runtime checks: - [x] loop checks for missed folders, if recursion is on, and adds them to the active watches - [x] general, configurable, logging (now it's very minimal to stdin/stderr) - [x] loop checks for removed folders - [ ] better debug and info logging
This is a very not ready piece of software. Be ready for things not working as expected.
I don't have an ETA yet since rsincron
will be worked on during my spare time.
Feel free to message me for suggestions, critiques, hints or
contribution questions.
Also, I neved had a public repository. If you want to share some experience on how to maintain one feel welcome to do so.
Please expect lots of bugs, rsincron
isn't alpha yet. It looks closer to a
proof-of-concept at the moment.
mkdir -p watched_dir/{1,2,3}/2/3
doesn't trigger on subfolders