以下はbzip2で圧縮されたファイルをxzで圧縮しなおす例。find の -exec オプションの引数は {} を見つかったファイル名に展開してくれる。
$ find ~/ -name '*.bz2' -exec sh -ec "f={}; bzip2 -v -d \${f}; xz -v -e -z -9 \${f%.bz2};" \;
上と同様の仕事をするが、xargsで2並列させる例。メモリの量によってはxz圧縮時にスワップをガリガリ使うことになるので並列数には注意。topやvmstatなどを見つつ要調整。
$ find ~/ -name '*.bz2' -print0 | xargs -0 -r -n 1 -P 2 -I{} sh -ec "f={}; bzip2 -v -d \${f}; xz -v -e -z -9 \${f%.bz2};"
処理するファイル順をソートしたい場合はfind -print0とxargs -0をsort -zパイプでつなげる。
$ find ~/ -name '*.bz2' -print0 | sort -z | xargs -0 -r -n 1 -P 2 -I{} sh -ec "f={}; bzip2 -v -d \${f}; xz -v -e -z -9 \${f%.bz2};"
$ find ~/ -name '*.bz2' -exec bzip2 -v -d {} \; $ find ~/ -name '*.bz2' -print0 | xargs -0 -r bzip2 -v -d $ find ~/ -name '*.bz2' -print0 | xargs -0 -r -n 1 -P 2 bzip2 -v -d $ find ~/ -name '*.pdf' -exec xz -v -e -z -9 {} \; $ find ~/ -name '*.bz2' -print0 | sort -z | xargs -0 -r -n 1 -P 2 -I{} sh -ec "f={}; bzip2 -v -d \${f}; xz -v -e -z -9 \${f%.bz2};" $ find ~/ -name '*.pdf' -print0 | sort -z | xargs -0 -r -n 1 -P 10 xz -v -e -z -9