您能用元数据标记文件并通过元数据搜索文件吗?

您能用元数据标记文件并通过元数据搜索文件吗?

我想用 标记生成的文件generated: true。然后我想查找并删除所有生成的文件rm -rf ....

现在,我将可以generated在文件名中包含它们filename.generated.go,以便删除它们rm -rf **/*.generated.*- 但我想知道是否有办法从文件名中省略它们

答案1

在 Linux 中看到man 7 xattr

扩展属性是与文件和目录永久关联的名称:值对,类似于与进程关联的环境字符串。属性可能已定义或未定义。如果已定义,则其值可能为空或非空。

[…]

可以将用户扩展属性分配给文件和目录,以存储任意附加信息,例如文件的 mime 类型、字符集或编码。用户属性的访问权限由文件权限位定义:检索属性值需要读取权限,更改属性值需要写入权限。

您可以使用以下方式设置扩展属性setfattr

向用户命名空间添加扩展属性:

$ setfattr -n user.foo -v bar file.txt

在你的情况下,命令将类似于:

setfattr -n user.generated -v true filename.go

您可以使用以下方式检索值getfattr

getfattr --only-values -n user.generated filename.go

以下命令将测试值是否相等* true(通过比较字符串):

[ "$(getfattr --only-values -n user.generated filename.go 2>/dev/null)" = true ]

退出状态0表示平等。

*请注意,由于工作方式的原因$(),所有尾随换行符在比较之前都会被删除。

现在我们可以使用此命令作为测试find

find . -type f -exec sh -c '
    [ "$(getfattr --only-values -n user.generated "$1" 2>/dev/null)" = true ]
' find-sh {} \; -print

笔记:

  • 添加-delete如果你想。

  • find-sh解释如下:中的第二个 sh 是什么sh -c 'some shell code' sh

  • 您标记了linuxmacosposix。我的专长是 Linux,对 macOS 一无所知。扩展属性肯定超出了 POSIX 的范围。

  • 为了使扩展属性发挥作用,文件系统必须支持它们。并非所有文件系统都如此

  • 当文件被移动到另一个文件系统或被复制时,扩展属性可能会丢失。cp使用正确的选项,GNU 能够复制它们(请参阅man 1 cp其中提到的内容xattr)。

  • 还有其他工具可以代替setfattr/ getfattr。至少有attrxattr。示例:

    attr -qg generated filename.go
    xattr -p user.generated filename.go
    

    请参阅man 1 attrman 1 xattr了解详情。

相关内容