Bash

BASH:使用 find 將 bz2 轉換為 gzip

  • June 26, 2014

我想將多重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|gzip 管道。它不是一個簡單的二進製文件,它是一個二進製文件鏈,要啟動這樣的東西,你需要一些可以處理管道的東西。

最好的東西是外殼。你必須呼叫一個 shell 來呼叫這個管道:

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

(我沒有測試它,可能會出現一些語法問題,請將此視為模板。)

引用自:https://serverfault.com/questions/608096