多くのファイルを含むディレクトリで実行すると、rm -rf /some/folder/*
サーバーのパフォーマンスが大幅に低下します。ドライブはプレミアムSSDです。
ファイルを削除するさまざまな方法を試しました:find --delete
、rsync
(説明ここ)。役に立ちません。
私の経験によると、これはAzureの問題です。
「遅い」とは、2分30秒以内に116,000個のファイルが処理されることを意味します。ローカルでは1秒かかります。他のサーバープロバイダも1〜3秒かかります。
サーバーの全体的なパフォーマンスに影響を与えずに多くのファイルをすばやく削除する方法はありますか?
ベストアンサー1
サーバーの全体的なパフォーマンスに影響を与えずに多くのファイルをすばやく削除する方法はありますか?
あなたはだますことができます。残念ながら、それは問題を解決せず、ただ押し出すだけです。一方、これは役に立つ解決策になります。
変える
rm -rf /some/folder/*
使用
items=(/some/folder/*) # List of items to delete
prefix=".DELETE_ME.$$"
for item in "${items[@]}"
do
x="$${item%/*}/.$prefix.${item##*/}" # New temporary path for item to delete
mv -f "$item" "$x" || rm -rf "$item" # Rename or delete
done
for item in "${items[@]}"
do
x="$${item%/*}/.$prefix.${item##*/}"
rm -rf "$x" # Delete whatever is left
done >/dev/null 2>&1 & # Run sequentially in background
これをスクリプト(解析されたパラメータを使用for item in "$@"
)またはシェル関数でラップできます。
私は複数の削除を同時に実行してサーバーのパフォーマンスを低下させないように、より明確な「バックグラウンドで名前を変更して削除する」の代わりに2つのループを使用しました。効果を防ぐことはできませんが、除去速度を上げるのに役立ちます。