BASH:使用 find 将 bz2 转换为 gzip

BASH:使用 find 将 bz2 转换为 gzip

我想将多个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 \;

答案1

事情没那么简单。Find 只能使用“exec”参数调用二进制文件,但现在您尝试调用 bunzip|gzip 管道。它不是一个简单的二进制文件,而是一系列二进制文件,要启动这样的文件,您需要某种可以处理管道的东西。

最好的办法是使用 shell。您必须调用 shell 才能调用此管道:

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

(我没有测试过,可能会出现一些语法问题,请将其视为模板。)

相关内容