網傳「rsync 刪除大量文件比 rm、find 快得多」,但鮮有實測數據支撐。本文在真實環境下對比多種刪除方式,揭示真相。
noatime 掛載)生成腳本(PHP):
for($i=0; $i<=0xF; $i++) {
for($j=0; $j<=0xF; $j++) {
for($m=0; $m<=0xF; $m++) {
$dirname = sprintf("test/%x/%x%x", $i, $j, $m);
mkdir($dirname, 0755, TRUE);
for($k=0; $k<250; $k++) {
file_put_contents("$dirname/$k.html", str_repeat("111", 100));
}
}
}
}
| 方法 | real | user | sys |
|---|---|---|---|
| find 遍歷統計 | 35.68 | 1.56 | 9.95 |
| rsync --delete-before -d empty/ test/ | 73.96 | 1.93 | 35.38 |
| rsync -a --delete empty/ test/ | 68.69 | 1.92 | 35.11 |
| find -type f -delete | 71.40 | 1.48 | 34.42 |
| find + xargs -P 16 rm -Rf(16 並發) | 63.16 | 1.02 | 41.36 |
| rm -Rf 直接遞歸刪除 | 80.33 | 1.07 | 32.18 |
mv 目錄 目錄.bak && nice -n 20 rm -rf 目錄.bak &,mv 近乎瞬間完成,刪除放入後台低優先級執行。mkfs 重建檔案系統最快(慎用)。實測證實:選擇熟悉、可靠的工具即可,無需迷信「神器」。