我想将多个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'
(我没有测试过,可能会出现一些语法问题,请将其视为模板。)