web-dev-qa-db-ja.com

並行してタール

数百のサブディレクトリがあるディレクトリがあります。各サブディレクトリをtarして圧縮し、結果のファイルに<currentDirName>.tar.bz2という名前を付けたいと思います。

私はやった:

find ./dir -type f -print0 | xargs -0 -n1 -P100 bunzip2

一度に100個のファイルを解凍します。 (私は海洋モデリングを行っているので、私のマシンは多くのクアッドコアで非常に強力です。)圧縮されたアーカイブファイルにその場で名前を付ける方法についての情報を含めながら、上記のような方法がわかりません。それぞれにtar cfj dir.tar.bz2 dirをしたくありません。

上記のbunzipコマンドのように一度に100以上を実行できるように、各ディレクトリ名をtarファイル名として自動的に使用して(findまたはparallelを使用して)実行できますか?

ご入力ありがとうございます。

....ピーター

1
user2592248

次のbashワンライナーは、おおよそあなたが説明したことを実行し、各ディレクトリを独自のtarballに配置します。

for d in dir/*/; do { tar -cj "$d" > "${d%/}.tar.bz2" ; } & done ; while [ "$(jobs)" ] ; do fg &>/dev/null ; done ; echo done
1
wyrm