元のファイルを失うことなくBZIP2複数のファイル

元のファイルを失うことなくBZIP2複数のファイル

約1000個のファイルをbzip2に圧縮したいと思います。しかし、私の使命は、古いファイルを削除し、元のファイルと対応するbz2ファイルを同じフォルダに保存することではありません。最速の方法は何ですか?

私の質問を変更すると、file1.txt、file2.txt、file3.txt...file1000.txtがあり、そのbz2バージョンを削除せずに同じフォルダに配置する必要があるとします。

この目標を達成する方法は?

答え1

この-kオプションは、マニュアルで次のようbzip2に説明されています。

-k --keep

圧縮または解凍中に入力ファイルを保存(削除しない)します。

したがって、通常どおりにファイルを圧縮してbzip2追加すると、-k元のファイルは削除されません。

すべての.txtファイルをディレクトリに圧縮するには:

bzip2 -k ./*.txt

これにより、「引数リストが長すぎます」(何万ものファイルがある場合に発生)が生成された場合は、代わりに単純なシェルループを使用してください。

for name in ./*.txt; do
    bzip2 -k "$name"
done

答え2

find /PATH/ -type f -execdir bzip2 -k '{}' \;

/PATH/、すべての正規表現を再帰的に検索します。Fエアーズ、そして実装するそれぞれの立場から目次bzip2 -k /PATH/TO/FILE元のファイルと圧縮ファイルのディレクトリは保存されますbzip2

だからこんなフォルダ構造になります

/PATH/file1
/PATH/file2
/PATH/folder1/
/PATH/folder1/file1
/PATH/folder1/file2

続く

/PATH/file1
/PATH/file1.bz2
/PATH/file2
/PATH/file2.bz2
/PATH/folder1/
/PATH/folder1/file1
/PATH/folder1/file1.bz2
/PATH/folder1/file2
/PATH/folder1/file2.bz2

上記の解決策は直列に実行されます。作業速度を上げるために並列に実行してみましょう。

find /PATH/ -type f | xargs -L1 -P10 -I{} bzip2 -k '{}'

一般ルールの再帰検索Fファイルを保存し/PATH/、そのファイルへの入力として渡し、xargs入力を解析します。エルイネス(1一度)、工程(最大。10並列実行)、使用入力プレースホルダー{}入力(この場合は行など)を処理するために使用されます。bzip2 -kそのプレースホルダに対して実行します。

ファイル名にスペースが含まれている場合は、プレースホルダーを引用します。

関連情報