尝试创建 grep 一行来查找不在文件列表中的文件

尝试创建 grep 一行来查找不在文件列表中的文件

这比任何事情都更具挑战性:可以在一条线上安全而优雅地完成它吗?

主要问题是模式和文件都是可能失败的命令的结果。

grep -Fxvf <(cmd-filter) <(cmd-list) | xargs -d "\n" gvfs-trash

  1. 如果传递了虚假路径,cmd-filter 可能会返回 0 失败或输出虚假的空列表(这是一个仿冒的远程 ls)。
  2. cmd-list 只是一个深度查找。这里的失败并不全是坏事,因为即使是拼写错误也意味着下一个将接收管道输出的 gvfs-trash 程序将不会在任何东西上运行。如果打字错误导致失败,那会很方便。

显然,主要问题是第一个问题。如果由于任何原因失败,或者由于拼写错误而为空,则 cmd-list 打印的所有文件都将被丢弃。至少可以说,我想避免这种情况。

我读过 man ,grep -f如果 cmd-filter 为空,则 grep 应该失败,但我在上面没有遇到过这种情况。如果我用 cmd-filter 替换,echo ""我会得到 cmd-list 中的所有文件。那么其他原因导致的失败呢?

编辑:考虑一下,这可能是因为 -v 开关,它是反转匹配以获得不在 cmd-list 中的行所必需的。如果是这样,我觉得很奇怪,它发现空模式列表的反向匹配就是一切。

无论如何,由于优雅可能是不可能的,并且如果没有好的响应,而不是“只是让你的懒骨头制作一个脚本”,我仍然会标记正确的使用 tmp 文件或类似文件的单行黑客。

编辑:我自己“失败”了这个挑战并且用了很长的时间脚本(ab)使用变量和进程替换来实现这一点。事实证明,我不需要检查错误状态以及 cmd-filter 中的标准输出是否为空,因为在所有错误情况下我发现它也是空的。

相关内容