#xattr #attributes #command-line #linux #command-line-tool #extended

bin+lib mattress

Linux 扩展属性 (xattrs) 的命令行工具

3 个不稳定版本

0.2.1 2023年8月3日
0.2.0 2023年8月3日
0.1.0 2023年8月2日

1584文件系统

GPL-3.0 许可证

23KB
459

床垫:Linux 扩展属性 (xattrs) 的命令行工具

使用纯 Rust 编写的,由美味的多纤维开源代码构成的,处理 Linux 扩展属性 (xattrs) 的最舒适的途径。

床垫提供用于操作单个文件上的 xattrs 的工具,以及作为文档数据库处理文件系统的工具,其中文件系统路径作为主键,扩展属性提供非索引字段。

历史

床垫与音频注释工具 Audiotater 一起开发。

许可证

本软件仅根据 GPL 版本 3 许可。

示例

床垫通过一组子命令操作,每个命令都有一个主要功能。

移动

将 xattr 值从一个路径移动到另一个路径。

  • mtr mv path1.txt path2.txt:将 path1.txt 上的所有 xattrs 移动到 path2.txt
  • mtr mv -f id path1.txt path2.txt:将 xattr id 从 path1.txt 移动到 path2.txt
  • mtr mv -f id -f url path1.txt path2.txt:将 xattrs idurl 从 path1.txt 移动到 path2.txt

复制

将 xattr 值从一个路径复制到另一个路径。

  • mtr cp path1.txt path2.txt:将 path1.txt 上的所有 xattrs 复制到 path2.txt
  • mtr cp -f id path1.txt path2.txt:将 xattr id 从 path1.txt 复制到 path2.txt
  • mtr cp -f id -f url path1.txt path2.txt:将 xattrs idurl 从 path1.txt 复制到 path2.txt

删除

删除 xattr 值。

  • mtr rm path.txt:删除 path.txt 上的所有 xattrs
  • mtr rm -f id path.txt:从 path.txt 中删除 xattr id
  • mtr rm -f id -f url path1.txt path2.txt path3.txt: 从path1.txt、path2.txt和path3.txt中删除xattr idurl

设置

设置xattr值。

  • mtr set -s id=123 path1.txt: 在path1.txt上设置xattr id为值123
  • mtr set -s id=123 -s url=http://example.com path1.txt path2.txt path3.txt: 在path1.txt、path2.txt和path3.txt上设置xattr id为值123和xattr url为值http://example.com

获取

获取并打印一个或多个路径的xattr值。

默认情况下,get子命令输出一个以制表符分隔的表格,列顺序为pathfieldvalue。值字节以原始形式写入stdout,不进行解码。

相比之下,当输出JSON时,Mattress尝试将值解码为UTF-8,当解码失败时填充默认码点。

  • mtr get path1.txt: 以原始(未解码)TSV格式打印与path1.txt关联的所有xattr
  • mtr get -f id path1.txt: 以原始(未解码)TSV格式打印path1.txt上的xattr id及其值
  • mtr get -f id -f url path1.txt path2.txt path3.txt: 以原始(未解码)TSV格式打印path1.txt、path2.txt和path3.txt上的xattr idurl及其相应值

get命令也可以输出JSON

  • mtr get -j path1.txt: 以UTF-8解码的JSON格式打印与path1.txt关联的所有xattr
  • mtr get -j -f id path1.txt: 以UTF-8解码的JSON格式打印path1.txt上的xattr id及其值
  • mtr get -j -f id -f url path1.txt path2.txt path3.txt: 以JSON格式打印path1.txt、path2.txt和path3.txt上的xattr idurl及其相应值

TODO 以“表”结构/索引为优势的递归get

索引

索引一个“表”。

当Mattress将目录作为数据库表处理时,每个文件作为关系型“记录”,主键来自表目录下的子路径。

每个文件的扩展属性作为关系型属性,有一个可覆盖的虚拟属性id表示主键。对于主键的每个子组件$i,还有一个虚拟属性id$i

Mattress创建的表目录还包含一个特殊的xattr user.mattress.keyname,它为该目录表示的主键组件提供一个用户友好的名称。

示例

  • mtr idx -k name ./people ./people-by-name:递归地将./people的内容重新索引到新的目录./people-by-name中,主键来自xattr name,并将文件硬链接到./people中相应的文件。

    这意味着./people-by-name目录中的文件将使用xattr name中定义的人名作为文件名。

    新的目录./people-by-name将具有xattr user.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中,主键是xattr region和xattr name的复合(按此顺序),并将文件硬链接到./people中相应的文件,通过./people-by-name中的硬链接解析。

    输出目录./people-by-region-and-name将具有xattr user.mattress.keyname=region,每个按区域命名的子目录将具有xattr user.mattress.keyname=name

依赖项

~3–12MB
~148K SLoC