BASH:bz2将gzip转换为find

我想将muliply bzip2文件转换为gzip格式。 我用foor loop完成了这个,但我想用find来做同样的事情:

BASH for循环:

 for i in $(ls -1 *.bz2); do echo "Converting: $i to ${i%.bz2}.gz"; { bunzip2 -c $i | gzip > ${i%.bz2}.gz; }; done 

我尝试了这样的事情,但它不起作用:

 find . -name "*.bz2" -type f -exec bunzip2 -c {} | gzip > ${1%.bz2}.gz \; 

这并不是那么简单。 Find只能用“exec”参数调用二进制文件,但是现在您可以尝试调用bunzip | gzippipe道。 它不是一个简单的二进制文件,它是一个二进制文件的链,并且启动一个这样的东西,你需要一些东西,它可以处理pipe道。

最好的事情是一个壳。 你必须调用一个shell来调用这个pipe道:

 find . -name "*.bz2" -type f -exec bash -e 'bunzip2 -c {} | gzip > ${1%.bz2}.gz' 

(我没有testing过,可能会出现一些语法问题,请看这个模板。)