3 个不稳定版本
0.2.1 | 2023年8月3日 |
---|---|
0.2.0 | 2023年8月3日 |
0.1.0 | 2023年8月2日 |
1584 在 文件系统
23KB
459 行
床垫:Linux 扩展属性 (xattrs) 的命令行工具
使用纯 Rust 编写的,由美味的多纤维开源代码构成的,处理 Linux 扩展属性 (xattrs) 的最舒适的途径。
床垫提供用于操作单个文件上的 xattrs 的工具,以及作为文档数据库处理文件系统的工具,其中文件系统路径作为主键,扩展属性提供非索引字段。
历史
床垫与音频注释工具 Audiotater 一起开发。
许可证
本软件仅根据 GPL 版本 3 许可。
示例
床垫通过一组子命令操作,每个命令都有一个主要功能。
移动
将 xattr 值从一个路径移动到另一个路径。
mtr mv path1.txt path2.txt
:将 path1.txt 上的所有 xattrs 移动到 path2.txtmtr mv -f id path1.txt path2.txt
:将 xattrid
从 path1.txt 移动到 path2.txtmtr mv -f id -f url path1.txt path2.txt
:将 xattrsid
和url
从 path1.txt 移动到 path2.txt
复制
将 xattr 值从一个路径复制到另一个路径。
mtr cp path1.txt path2.txt
:将 path1.txt 上的所有 xattrs 复制到 path2.txtmtr cp -f id path1.txt path2.txt
:将 xattrid
从 path1.txt 复制到 path2.txtmtr cp -f id -f url path1.txt path2.txt
:将 xattrsid
和url
从 path1.txt 复制到 path2.txt
删除
删除 xattr 值。
mtr rm path.txt
:删除 path.txt 上的所有 xattrsmtr rm -f id path.txt
:从 path.txt 中删除 xattrid
mtr rm -f id -f url path1.txt path2.txt path3.txt
: 从path1.txt、path2.txt和path3.txt中删除xattrid
和url
设置
设置xattr值。
mtr set -s id=123 path1.txt
: 在path1.txt上设置xattrid
为值123
mtr set -s id=123 -s url=http://example.com path1.txt path2.txt path3.txt
: 在path1.txt、path2.txt和path3.txt上设置xattrid
为值123
和xattrurl
为值http://example.com
获取
获取并打印一个或多个路径的xattr值。
默认情况下,get
子命令输出一个以制表符分隔的表格,列顺序为path
、field
和value
。值字节以原始形式写入stdout,不进行解码。
相比之下,当输出JSON时,Mattress尝试将值解码为UTF-8,当解码失败时填充默认码点。
mtr get path1.txt
: 以原始(未解码)TSV格式打印与path1.txt关联的所有xattrmtr get -f id path1.txt
: 以原始(未解码)TSV格式打印path1.txt上的xattrid
及其值mtr get -f id -f url path1.txt path2.txt path3.txt
: 以原始(未解码)TSV格式打印path1.txt、path2.txt和path3.txt上的xattrid
和url
及其相应值
get
命令也可以输出JSON
mtr get -j path1.txt
: 以UTF-8解码的JSON格式打印与path1.txt关联的所有xattrmtr get -j -f id path1.txt
: 以UTF-8解码的JSON格式打印path1.txt上的xattrid
及其值mtr get -j -f id -f url path1.txt path2.txt path3.txt
: 以JSON格式打印path1.txt、path2.txt和path3.txt上的xattrid
和url
及其相应值
TODO 以“表”结构/索引为优势的递归get
索引
索引一个“表”。
当Mattress将目录作为数据库表处理时,每个文件作为关系型“记录”,主键来自表目录下的子路径。
每个文件的扩展属性作为关系型属性,有一个可覆盖的虚拟属性id
表示主键。对于主键的每个子组件$i,还有一个虚拟属性id$i
Mattress创建的表目录还包含一个特殊的xattr user.mattress.keyname
,它为该目录表示的主键组件提供一个用户友好的名称。
示例
-
mtr idx -k name ./people ./people-by-name
:递归地将./people
的内容重新索引到新的目录./people-by-name
中,主键来自xattrname
,并将文件硬链接到./people
中相应的文件。这意味着
./people-by-name
目录中的文件将使用xattrname
中定义的人名作为文件名。新的目录
./people-by-name
将具有xattruser.mattress.keyname=name
,以便后续命令可以使用用户友好的字段名进行高效的索引查找。 -
mtr idx -k region -k name -s ./people-by-name ./people-by-region-and-name
:递归地将./people-by-name
的内容重新索引到新的目录./people-by-region-and-name
中,主键是xattrregion
和xattrname
的复合(按此顺序),并将文件硬链接到./people
中相应的文件,通过./people-by-name
中的硬链接解析。输出目录
./people-by-region-and-name
将具有xattruser.mattress.keyname=region
,每个按区域命名的子目录将具有xattruser.mattress.keyname=name
。
依赖项
~3–12MB
~148K SLoC