web-dev-qa-db-ja.com

削除するすべてのファイルのリストを最初に生成することなく、何百万ものファイルを効率的に削除します

マウントされたNASドライブから何百万ものファイルを削除する方法を見つけようとしています。アクセス元のOSはRHEL7.6です。

ディレクトリはアクティブに書き込まれており、1日あたり数万から数十万の追加ファイルがあります。

次のような削除手法を実行しようとすると、次のようになります。

rsync -av --delete empty_dir/ millions_of_files_dir/

最初は大量のCPU/MEMを使用し、「インクリメンタルファイルリストを送信しています」というメッセージが表示されます。これは永遠に続き、CPU/MEMの使用量は徐々に最小限に抑えられます。

私の理論では、これはファイルリストが終わらないために起こっているということです。追加されるファイルは際限なく増えています。

SO:削除する前にファイルの完全なリストを必要としない削除手法はありますが、ファイルが見つかると「ストリーム削除」されますか?

2
Logic Crypto

findコマンドを-deleteオプション、ファイルは完全なリストを作成せずに、見つかったときに削除されます。

find . -type f -delete # deletes all files in the current dir and all subdirs

注意すべき点は、ほとんどのLinuxファイルシステムは、単一のディレクトリにあるその数のファイルではパフォーマンスが低いことです。 「完全な」リストを作成しなくても、ディレクトリの内容をリストする必要があります。これは、何百万ものファイルが含まれていると、ひどいパフォーマンスになります。

7
jordanm