我正在处理Web应用程序的部署脚本。该剧本的原作者写了以下我不太了解的内容。
find */target -name myapp*.jar -exec mv -t $CIRCLE_ARTIFACTS {} + || true
谷歌搜索到目前为止已经让我,但我仍然有点不确定
{} + || true
用于。
答案 0 :(得分:5)
{} +
后缀是-exec
的{{1}}操作的一部分:它在每个find
上替换尽可能多的参数(即,找到的文件数量)调用。 (尽可能多地限制""因为在操作系统用于存储环境变量和命令行参数的区域中只有这么多可用空间,所以如果{ {1}}有很多结果,即使使用mv
也可能需要多次find
次调用。
与这个传统命令相比:
mv
每找到一个文件,运行-exec ... {} +
一次。由于find */target -name 'myapp*.jar' -exec mv -t "$CIRCLE_ARTIFACTS" {} ';'
是外部可执行文件,因此这是非常昂贵的。
相比之下,
mv
...尽可能少地运行/bin/mv
个调用。 (请注意,此用法需要find */target -name 'myapp*.jar' -exec mv -t "$CIRCLE_ARTIFACTS" {} +
扩展名,而POSIX未指定该扩展名;因此,它只能在GNU平台上使用。
最后,mv
只是一个布尔OR运算:如果-t
失败,则|| true
运行,强制命令始终产生真实结果。如果您使用find
运行,则可以防止在发生故障时退出脚本。
这也可以更简洁地写为true
,因为set -e
是||:
的同义词。
答案 1 :(得分:1)
{}
替换为find
命令找到的文件名。
因此它找到带有find
命令的文件,并为尽可能多的文件执行mv
(这由+
标记)。
|| true
是命令其余部分的逻辑OR,它基本上确保命令的退出状态为零(这对于脚本的其余部分可能很重要