"找到...... {} + || true"做什么?

Joh*_*all 3 bash

我正在研究Web应用程序的部署脚本.该脚本的原作者写了以下我不太了解的内容.

find */target -name myapp*.jar -exec mv -t $CIRCLE_ARTIFACTS {} + || true
Run Code Online (Sandbox Code Playgroud)

谷歌搜索到目前为止,但我仍然有点不确定

{} + || true
Run Code Online (Sandbox Code Playgroud)

是用来.

Cha*_*ffy 5

{} +后缀是一部分-exec的作用find:它会替代许多论据尽可能地(即作为发现有很多文件)上的每个mv调用.("尽可能多"是有限制的,因为操作系统用于存储环境变量和命令行参数的区域中只有这么多可用空间,因此如果find有很多结果,mv则甚至可以使用多个调用-exec ... {} +.


与这个传统命令相比:

find */target -name 'myapp*.jar' -exec mv -t "$CIRCLE_ARTIFACTS" {} ';'
Run Code Online (Sandbox Code Playgroud)

这将运行mv一次,每个文件中找到.由于/bin/mv是外部可执行文件,因此这是非常昂贵的.

相比之下,

find */target -name 'myapp*.jar' -exec mv -t "$CIRCLE_ARTIFACTS" {} +
Run Code Online (Sandbox Code Playgroud)

...运行尽可能少的mv调用.(请注意,此用法需要-t扩展,而POSIX未指定扩展;因此,它仅在GNU平台上可用).


最后,|| true只是一个布尔OR运算:如果find失败,则true运行,强制命令始终产生真实结果.如果您正在运行set -e,则可以防止在发生故障时退出脚本.

这也可以更简洁地写成||:,因为:它是同义词true.