私はcentosを実行しており、フォルダー内に約1,300個のファイルがあり、それぞれを個別にbzipする必要があります。これを渡す最も簡単な方法は何でしょうか?
5 に答える
すべてのファイルが単一のディレクトリにある場合は、次のようになります。
bzip2 *
十分です。より堅牢なアプローチは次のとおりです。
find . -type f -exec bzip2 {} +
これにより、現在のディレクトリとそのサブディレクトリ内のすべてのファイルが圧縮され、数万のファイルがある場合でも機能します(ディレクトリ内のファイルが多すぎると、*を使用すると壊れます)。
コンピューターに複数のコアがある場合は、一度に複数のファイルを圧縮することで、これをさらに改善できます。たとえば、4つのファイルを同時に圧縮する場合は、次を使用します。
find . -type f -print0 | xargs -0 -n1 -P4 bzip2
マルチコアMacでbzip2を実行するには、次のコマンドを発行できます(bzipするフォルダー内にいる場合)
find . -type f -print0 | xargs -0 -n1 -P14 /opt/local/bin/bzip2
これにより、端末が14個のCPUコアを同時に使用しているフォルダー内のすべてのファイルが再帰的にbzip圧縮されます。
編集することで、使用するコアの数を調整できます
-P14
bzip2バイナリがどこにあるかわからない場合は、次のコマンドを発行して把握できます
which bzip2
そのコマンドの出力は、置き換えることができるものです
/opt/local/bin/bzip2
と
bzip2
私は別のディレクトリへのファイルに以下のスクリプトを書きました
#!/bin/bash
filedir=/home/vikrant_singh_rana/test/*
for filename in $filedir; do
name=$(basename "$filename" | sed -e 's/\.[^.]*$//')
bzip2 -dc $filename > /home/vikrant_singh_rana/unzipfiles/$name
done
私のサンプルファイル名は次のようなものでした
2001_xyz_30Sep2020_1400-30Sep2020_1500.csv.bz2
直接コマンドを取得できなかったので、これを作成しました。これは期待どおりに正常に機能しています。
ディレクトリ内から:bzip2 *
find PATH_TO_FOLDER -maxdepth 1 -type f -exec bzip2 -zk {} \;