需要通过Apache camel-exec使用args执行gzip命令

时间:2015-10-23 20:39:32

标签: java linux spring apache-camel

我想使用似乎很简单的camel-exec组件创建一个执行gzip命令的camel路由。但是,我需要压缩输入文件而不修改原始文件,压缩文件应该移动到另一个输出目录。

我用谷歌搜索并发现它可以通过linux中的以下命令之一来实现:

gzip -c test_input_file.dat > /home/prem/myappdir/output/test_output.gz

gzip < test_input_file.dat > /home/prem/myappdir/output/test_output.gz

cat test_input_file.dat | gzip /home/prem/myappdir/output/test_output.gz

gzip -c test_input_file.dat | cat > /home/prem/myappdir/output/test_output.gz

以上所有命令在linux终端都运行正常。当我在驼峰路线中使用这些命令时,它们都没有工作。

我正在使用&#39; gzip&#39;因为命令和其余内容作为命令参数传递给camel路由中的Exec组件。

执行gzip任务的我的Camel路由是:

<!-- route to demonstrate camel-exec -->
    <route id="camelExecDemo">
        <from uri="timer://kickoff?repeatCount=1"/>         
        <to uri="exec:gzip?args=-c /home/prem/Documents/input/test_input_file.dat &gt; /home/prem/myappdir/output/test_output.gz&amp;useStderrOnEmptyStdout=true"/>
        <log message="${body}"/>
    </route>

有人请帮忙!我坚持这个问题。

注意:只有一个输入文件作为参数的简单gzip命令在我的路由中正常工作。但是,我需要像上面提到的那样去做。

系统详情:

Linux:RHEL(或Linux Mint 17)
骆驼版本:2.11.0

1 个答案:

答案 0 :(得分:2)

最后我明白了。我认为创建用于执行这些命令的shell脚本是执行此任务的唯一方法。后来,我发现它可以通过&#39; sh&#39;命令(shell)和-c选项,它从命令字符串中获取输入,并像shell脚本一样执行它们。

以下linux命令将执行gzip而不修改原始输入文件,并将压缩输出文件移动到另一个输出目录:

sh -c "gzip -c test_input_file.dat > /home/prem/myappdir/output/test_output.gz"

我的骆驼路线更新如下:

    <route id="camelExecDemo">
        <from uri="timer://kickoff?repeatCount=1"/>         
        <to uri="exec:sh?args=-c &quot;gzip -c /home/prem/Documents/input/test_input_file.dat &gt; /home/prem/myappdir/output/test_output.gz&quot; &amp;useStderrOnEmptyStdout=true"/>
        <log message="${body}"/>
    </route>

同样可以在shell命令的帮助下顺序执行多个linux命令,然后可以在camel-exec组件中使用它。

感谢博客文章,我提取了这个想法:

http://zhanghaoblog.blogspot.in/2015/01/camel-exec-multiple-commdans-scripts.html