2个稳定版本

1.0.2 2024年8月18日
1.0.1 2024年8月17日

文件系统 中排名 #79

Download history 292/week @ 2024-08-14

每月下载量 292

MIT 许可证 MIT

8.5MB
3K SLoC

Rust 1.5K SLoC // 0.0% comments PowerShell 807 SLoC // 0.2% comments Batch 659 SLoC JavaScript 12 SLoC

包含 (DOS可执行文件, 8.5MB) example/bin/spyrun.exe

spyrun - 文件监视器和命令执行器

spyrun 是一个监视文件并在特定事件发生时执行命令的工具。它可以监视文件的修改、添加等。

安装

cargo install spyrun

使用方法

spyrun 使用配置文件进行操作。

> spyrun --help
Usage: spyrun.exe [OPTIONS]

Options:
  -c, --config <FILE>  Sets a custom config file [default: spyrun.toml]
  -d, --debug...       Turn debugging information on
  -h, --help           Print help
  -V, --version        Print version

配置文件

spyrun 的配置文件是 TOML 格式。默认文件名是 spyrun.toml,位于可执行文件所在的同一目录中。配置文件指定要监视的文件、要执行的命令以及各种其他选项。

  • 示例
[vars]
base = '{{ cwd }}/example'
hostname = '{{ env(arg="COMPUTERNAME") }}'
version = '20240407_125639'
fn_toast = '''
function Show-Toast {
  [CmdletBinding()]
  param(
    [Parameter(Mandatory=$true)][String]$title,
    [Parameter(Mandatory=$true)][String]$message,
    [Parameter(Mandatory=$true)][String]$detail
  )
  [Windows.UI.Notifications.ToastNotificationManager, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
  [Windows.UI.Notifications.ToastNotification, Windows.UI.Notifications, ContentType = WindowsRuntime] | Out-Null
  [Windows.Data.Xml.Dom.XmlDocument, Windows.Data.Xml.Dom.XmlDocument, ContentType = WindowsRuntime] | Out-Null

  $app_id = '{1AC14E77-02E7-4E5D-B744-2EB1AE5198B7}\WindowsPowerShell\v1.0\powershell.exe'
  $content = @"
<?xml version="1.0" encoding="utf-8"?>
<toast>
    <visual>
        <binding template="ToastGeneric">
            <text>$($title)</text>
            <text>$($message)</text>
            <text>$($detail)</text>
        </binding>
    </visual>
</toast>
"@
  $xml = New-Object Windows.Data.Xml.Dom.XmlDocument
  $xml.LoadXml($content)
  $toast = New-Object Windows.UI.Notifications.ToastNotification $xml
  [Windows.UI.Notifications.ToastNotificationManager]::CreateToastNotifier($app_id).Show($toast)
}
'''

[cfg]
stop_flg = '{{ base }}/stop.flg'
stop_force_flg = '{{ base }}/stop.force.flg'
max_threads = 8

[log]
path = '{{ base }}/log/{{ cmd_stem }}.log'
level = 'info'

[init]
cmd = 'powershell'
arg = ['-NoProfile', '-Command', '''& {
  {{ fn_toast }}
  Show-Toast -title "spyrun {{ version }} on {{ hostname }}" -message "spyrun is running" -detail "spyrun path is {{ cmd_path }}. config path is {{ cfg_path }}."
}''']

# watch files and notifiy.
[[spys]]
name = 'toast'
input = '{{ base }}/watch_dir'
output = '{{ base }}/log'
[[spys.patterns]]
pattern = '\.txt$'
cmd = 'powershell'
arg = ['-NoProfile', '-Command', '''& {
  {{ fn_toast }}
  Show-Toast -title "{{ event_name }}" -message "{{ event_path }} is {{ event_kind }}" -detail "name: {{ event_name }}. dir: {{ event_dir }}"
}''']

[vars]

变量可以自由设置。变量按字母顺序定义。因此,需要注意顺序。

  • OK
[vars]
a = "a"
b = "b and {{ a }}"
  • NG
[vars]
a = "a and {{ b }}"
b = "b"

[cfg]

stop_flg

停止 spyrun 的文件路径。当它检测到该路径已被创建或修改时,它将完成所有正在运行的操作并退出。

stop_force_flg

强制停止 spyrun 的文件路径。当它检测到该路径已被创建或修改时,它将立即强制 spyrun 停止。

max_threads

spyrun 中使用的最大线程数。默认值基于 CPU核心数

[log]

path

日志文件的路径。

level

日志级别。默认值是 info。可以指定以下值。

  • off
  • error
  • warn
  • info
  • debug
  • trace

[init]

当 spyrun 启动时执行初始化。

cmd

要执行的命令。

arg

传递给命令的参数。

[[spys]]

间谍列表。

name

间谍的名称。

events

事件列表。默认值是 ['Create', 'Modify']。可以指定以下值。

  • 访问
  • Create
  • Modify
  • Remove

input

要监视的路径。

output

输出路径。标准输出和标准错误写入此路径。

recursive

如果您想递归地监视输入路径,请将此设置为true。默认值是false。

防抖

如果您想防抖执行,请设置此设置。默认值是50毫秒。

节流

如果您想节流执行,请设置此设置。默认值是0毫秒。

延迟

在执行命令之前的延迟时间。默认值是0毫秒。

  • 一个参数

在5000毫秒后执行。

delay = [5000]
  • 两个参数

在执行前等待5000毫秒到10000毫秒之间的随机时间。

delay = [5000, 10000]

[spys.patterns]

模式列表。

模式

要监视的模式。这是一个正则表达式。

cmd

要执行的命令。

arg

传递给命令的参数。

spys.poll

如果您想以轮询模式监视输入路径,请设置此设置。

间隔

监视输入路径的间隔。

spys.walk

如果您想遍历输入路径,请设置此设置。如果设置了此设置,当spyrun启动时也会遍历输入路径。

min_depth

遍历输入路径的最小深度。

max_depth

遍历输入路径的最大深度。

如果您想跟随符号链接,请设置此设置。

模式

匹配输入路径的模式。这是一个正则表达式。

延迟

在遍历输入路径之前的延迟时间。

  • 一个参数

在5000毫秒后遍历。

delay = [5000]
  • 两个参数

在5000毫秒到10000毫秒之间随机等待。

delay = [5000, 10000]

许可协议

spyrun遵循MIT许可协议分发。

依赖项

~16–27MB
~400K SLoC