
約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
そのプレースホルダに対して実行します。
ファイル名にスペースが含まれている場合は、プレースホルダーを引用します。