删除大量文件

删除大量文件

我不小心创建了 800 万个文件,每次我尝试删除它们时,服务器几乎死机,因为 rm 进程吃掉了所有磁盘 IO(服务器是远程的,没有控制台)。

像这样的事情应该起作用吗?即调用 ionice?

sudo find /var/lib/php5/ -type f -exec ionice -c3 rm -f {} \;

答案1

我会这样做...

sudo ionice -c3 find /var/lib/php5/ -type f -exec  rm -f '{}' +

(我认为)更像+xargs,因此在处理大量文件时效率更高。将 ionice 放在整个命令上应该使每个子命令以及搜索本身也被离子化。你试过这个吗?

你也可以做到非常好 nice -n 19 ionice -c 3 programname虽然这不是必要的。

或从中得到提示@亚历克斯你可以

ionice -c3 find /var/lib/php5/ -type f -delete

答案2

我会做这样的事情:

import os
os.nice(19)
dir = "/var/lib/php5/"
bad_files = [os.join(dir, file) for file in os.listdir(dir)
                     if is_bad(os.join(dir, file))]
for junk in bad_files:
  os.unlink(junk)
  time.sleep(0.1)

答案3

也许太傻了。

删除整个目录结构怎么样?

find /var/lib/php5 -type d -print > /tmp/directories
rm -r /var/lib/php5
cat /tmp/directories | xargs mkdir

相关内容