我想用 标记生成的文件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
?您标记了
linux
、macos
、posix
。我的专长是 Linux,对 macOS 一无所知。扩展属性肯定超出了 POSIX 的范围。为了使扩展属性发挥作用,文件系统必须支持它们。并非所有文件系统都如此。
当文件被移动到另一个文件系统或被复制时,扩展属性可能会丢失。
cp
使用正确的选项,GNU 能够复制它们(请参阅man 1 cp
其中提到的内容xattr
)。还有其他工具可以代替
setfattr
/getfattr
。至少有attr
和xattr
。示例:attr -qg generated filename.go xattr -p user.generated filename.go
请参阅
man 1 attr
和man 1 xattr
了解详情。