2

我正在使用带有 spring xml 的 Camel。当我尝试通过骆驼的 exec-component 调用 find 时,会出现一些问题来获得正确的参数。

我想调用 'find /somepath/ -mtime +10'

我的骆驼路线有这个元素。

<to uri="exec:find?args=/somepath/ -mtime +30 -delete" />

在日志中我得到

2017-11-06 20:12:00,172 INFO  [org.apache.camel.component.exec.ExecProducer] (DefaultQuartzScheduler-noderoutes_Worker-10) The command ExecCommand [args=[/tmp/integrator/msglog/, -mtime,  **30**, -print], executable=find, timeout=9223372036854775807, outFile=null, workingDir=null, useStderrOnEmptyStdout=true] had exit value 0

我们可以看到 + 号被删除并且 find 命令将由于缺少 + 而失败。我尝试了不同的方法来逃避或编码 + 没有成功。任何人都知道保护 +sign 的方法吗?

4

2 回答 2

1

看看RAW()

<to uri="exec:find?args=RAW(/somepath/ -mtime +30 -delete)" />
于 2017-11-06T22:06:44.050 回答
0

在我尝试转义 + 并在 RAW 中包装所有 args 或部分 args 之后,我引入了另一层。我把调用放在一个脚本中,只将路径和天数作为 exec 的参数。

<to uri="exec:/somepath/script.sh?args=/startpath/ 30" />

我猜在将命令行放入操作系统之前,只有多层编码/解码正在进行。

于 2017-11-07T13:12:44.367 回答