#config-file #directory #directory-structure #alias #pattern #follow #checker

app file_checker

一个检查文件和目录是否遵循给定模式的工具

6 个版本

0.3.1 2023 年 2 月 23 日
0.3.0 2023 年 2 月 23 日
0.2.1 2023 年 2 月 20 日
0.1.1 2023 年 2 月 20 日

#865文件系统

GPL-3.0-only

34KB
793

文件检查器

这是一个文件和目录检查器,用于验证其结构是否遵循配置文件中定义的规则。

安装

    $ cargo install file_checker

使用方法

$ file_checker --help
File checking program

Usage: file_checker [OPTIONS]

Options:
-p, --path <PATH>      Path to the root directory to check [default: .]
-c, --config <CONFIG>  Path to config file [default: config.toml]
-t, --target <TARGET>  Target directory to print diagnostics for [default: .]
-h, --help             Print help

配置

配置文件是一个 TOML 文件,其中包含检查文件和目录的规则。

配置文件由两部分组成

  • [[alias]]: 这部分包含可以在规则中使用的别名。
  • [dir]: 这部分包含检查目录的规则。

别名

别名用于简化规则。例如,如果您想匹配日期,可以为它定义一个别名

[[alias]]
name = 'date'
regex = '\d{4}-\d{2}-\d{2}
description = "Date"
example = '2019-01-01'

描述和示例是可选的。

正则表达式条目可以是字符串或字符串数组。如果是数组,正则表达式将是所有字符串的连接。如果任何字符串匹配别名,则别名将被展开

[[alias]]
name = 'hour-date'
regex = ['\d{2}:\d{2}' ,' ' ,'date']

上一个别名将匹配类似 '12:00 2019-01-01' 的字符串,其正则表达式为 '\d{2}:\d{2} \d{4}-\d{2}-\d{2}'。

规则

规则在 [dir] 部分中定义。只能在 [[alias]] 部分中定义的别名用于规则。您不能使用任何原始正则表达式。

在规则内部,您可以使用以下关键字

  • required-files: 必须存在于目录中的文件列表的列表。至少有一个列表必须包含所有文件,才能被视为有效。
  • optional-files: 可以存在于目录中的文件列表。
  • optional-dirs: 可以存在于目录中且不会被检查的目录列表。

要匹配目录,请使用匹配的别名作为节名称

[dir.date]
required-files = [['file1', 'file2'], ['file3', 'file4']]
optional-files = ['file5', 'file6']
optional-dirs = ['dir1']

上一个规则将匹配匹配 'date' 正则表达式的顶级目录,并将验证该目录至少包含以下别名组合之一

  • file1 和 file2
  • file3 和 file4

它还将验证它不包含除了在 required-files(仅整个匹配的列表)和 optional-files 部分中指定的文件之外的任何文件。

任何缺失的必需文件将创建 MissingRequiredFile 违规。任何额外的文件将创建 UnknownFile 违规。

要指定嵌套目录,请使用目录别名作为节名称

[dir.date.hour-date]
required-files = [['file1', 'file2'], ['file3', 'file4']]
optional-files = ['file5', 'file6']
optional-dirs = ['dir1']

如果在规则中指定的目录不存在,它将创建一个名为MissingRequiredDir的违规。您可以在规则中添加以下关键字来忽略此违规

ignore-missing = true

如果目录与任何正则表达式都不匹配,它将创建一个名为UnknownDir的违规。

示例

以下是一个配置文件的示例

[[alias]]
name = 'date'
regex = '\d{4}-\d{2}-\d{2}'
description = "Date"
example = '2019-01-01'

[[alias]]
name = 'hour-date'
regex = ['\d{2}:\d{2}' ,' ' ,'date']

[[alias]]
name = 'csv'
regex = '.*\.csv$'

[[alias]]
name = 'txt'
regex = '.*\.txt$'

[[alias]]
name = 'toml'
regex = '.*\.toml$'

[[alias]]
name = 'dir1'
regex = 'opt'

[dir.date]
required-files = [['toml']]
optional-files = []

[dir.date.hour-date]
required-files = [['csv'], ['txt']]
optional-files = ['toml']
optional-dirs = ['dir1']

此配置文件将针对以下目录结构产生一些错误

.
├── 2019-01-01
│   ├── 12:00 2019-01-01
│   │   ├── info.json
│   │   ├── file1.csv
│   │   └── opt
│   │        └── file7.txt
│   └── 13:00 2019-01-01
│       └── info.toml
└── 2019-01-02
    ├── config.toml
    ├── 12:00 2019-01-02
    │   └── file5.csv
    └── 13:00 2019-01-02
        └── file8.txt

产生的错误是

"./2019-01-01/12:00 2019-01-01" - UnknownFile - File "info.json" does not match any regex
"./2019-01-01/13:00 2019-01-01" - MissingRequiredFile - File "csv" is missing

依赖项

~3.5–5.5MB
~97K SLoC