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



我想使用看似简单的camel-exec组件创建一个骆驼路由来执行gzip命令。但是,我需要在不修改原始文件的情况下压缩输入文件,并且压缩后的文件应该移动到另一个输出目录。

我搜索了一下,发现它可以在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终端上都可以正常工作。当我在骆驼路由中使用这些命令时,它们都不起作用。

我使用'gzip'作为命令,其余内容作为命令参数传递给骆驼路由的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 (or Linux Mint 17)
Camel Version: 2.11.0

我终于明白了。我认为创建一个shell脚本来执行这些命令是完成这项任务的唯一方法。后来,我发现它可以通过'sh'命令(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

最新更新