使用 xargs 是否有更好的 'use arguments in a pipes sequence' 方法?

Is there a better way to 'use arguments in a pipes sequence' with xargs?

有几次我想使用 xargs 生成的参数并在详细的命令管道中使用它们(通过几个步骤输送结果并使用)。

我通常最终使用 bash -c 并将 xargs-generated-argument 作为唯一参数。例如:

find *.obj | xargs -I{} bash -c 'sha256sum [=11=] | tee [=11=].sha256' {}

有没有更好或更简洁的方法来做到这一点?

我觉得用GNU Parallel更简洁如下:

find "*.obj" -print0 | parallel -0 sha256sum {} \| tee {}.sha256

此外,就是:

  • 性能可能更高,因为它在所有 CPU 个内核上并行工作
  • 可使用 parallel --dry-run ...
  • 进行调试
  • 使用 --bar--eta 获取进度条或 ETA 以获取更多信息
  • 更灵活,因为它为您提供了许多预定义变量,例如 {.} 表示当前文件减去其扩展名,{/} 表示当前文件的“基本名称”,{//}当前文件所在目录等