我可以使用 sed 或等效工具来清理 vala 生成的文件吗?

can I use sed or an equivalent to cleanup vala generated files?

this project 的维护者发布的 tarball 包含 vala 生成的 c 文件。

我正在寻找一种解决方案来查找 .vala 文件并删除等效的 .c 文件

例如

directory\file1.vala
directory\file1.c
directory\file3.c
directory\subdirectory\file2.vala
directory\subdirectory\file2.c
directory\subdirectory\file4.c

从上面我想删除 file1.c 和 file2.c 但不删除 file3.c 和 file4.c

所以伸手去拿可信赖的find我可以用

find . -name "*.vala" -exec ls {} \;

这将列出所有 vala 文件。

再进一步,我可以通过

将输出更改为 .c
find . -name "*.vala" | sed -e 's/.vala/.c/'

现在我需要更进一步,删除那些 .c 文件。

我想我可以将输出重定向到另一个文件,然后编写一个 shell 脚本来循环每一行并删除文件。

有什么更好的想法吗?有没有更好的方法来清理 vala 生成的文件?

将此附加到您的 sed 命令:

| xargs echo rm -v

如果一切正常,请删除 echo

Cyrus 建议使用 xargs 可能更合适,但如果您的查找支持 -exec ... +,您也可以使用:

find . -name "*.vala" -exec bash -c 'echo ${@/vala/c}' sh {} +
find . -name "*.vala" -exec bash -c 'rm ${@/vala/c}' sh {} +

(您可以使用 \;+,但是如果您有很多文件,额外的 shell 调用会使它变得很慢。)注意这是等同于您的 sed,并且在处理名称如 avala.vala 的文件时遇到与 sed 解决方案相同的问题。