#文件内容 #fuse #lua #转换 #文件 #fs

app transformfs

一个只读的FUSE文件系统,用于使用Lua转换文件内容

5个版本 (3个破坏性更新)

0.4.0 2024年8月15日
0.3.0 2024年7月9日
0.2.0 2024年6月26日
0.1.1 2024年6月26日
0.1.0 2024年6月24日

#155 in 文件系统

Download history 440/week @ 2024-06-24 4/week @ 2024-07-01 152/week @ 2024-07-08 143/week @ 2024-08-12

每月143次下载

AGPL-3.0

27KB
550

transformfs

Crates.io Version

一个只读的FUSE文件系统,可以将输入文件通过Lua脚本转换为输出文件。

在transformfs中,输入文件可以通过用户定义的Lua脚本按需转换。输入是传递给用户脚本的文件列表,用户脚本返回动态生成的文件列表。

此文件系统适用于在不复制或修改原始文件的情况下转换数据。

安装

Cargo

cargo install transformfs

Nix

Transformfs还打包为NUR包 nur.repos.dcsunset.transformfs。您可以通过将其包含在您的nix配置中安装它。

用法

# mount transformfs
transformfs -s <lua_script> [-i <input1>...] <mnt_point>

# umount
fusermount -u <mnt_point>

输入可以是零个、一个或多个文件或目录(目录解析为单个文件)。

用户Lua脚本必须返回一个包含以下函数作为字段的模块(表)

  • transform(inputs):将输入(文件路径列表)转换为输出的函数。它应该返回一个Output列表。

每个Output都是一个具有以下字段的表

  • path:文件路径
  • metadata:返回文件的元数据作为FileMetadata
  • open():(可选)如果定义,则在打开文件时调用。用于提前打开文件以提高性能
  • close():(可选)如果定义,则在关闭文件时调用。用于回收资源
  • read(offset, size):在特定位置返回文件内容作为字符串。

FileMetadata字段

  • size:文件大小
  • block_size:(可选)文件块大小(默认:512)

Transformfs出于性能原因使用LuaJIT,因为Lua代码在大文件中执行非常频繁。因此,它可能不支持在编写时的Lua 5.3或5.4中的新功能。

请参阅 examples 目录中的示例脚本以获取更多详细信息,并使用 transformfs --help 命令获取帮助。

许可证

AGPL-3.0

依赖项

~6–16MB
~208K SLoC