linux – 如何在不干扰服务器的情况下删除数百万个文件

我想删除一个Nginx缓存目录,我快速清除它:
mv cache cache.bak
mkdir cache
service Nginx restart

现在我有一个cache.bak文件夹,里面有200万个文件.我想删除它,而不会打扰服务器.

一个简单的rm -rf cache.bak会破坏服务器,即使最简单的HTTP响应在rm运行时需要16秒,所以我不能这样做.

我试过了ionice -c3 rm -rf cache.bak,但它没有帮助.服务器有一个硬盘,而不是SSD,可能在SSD上,这些可能不是问题.

我相信最好的解决方案是某种限制,比如Nginx内置缓存管理器的方式.

你怎么解决这个问题?有没有可以做到这一点的工具?

在Ubuntu 16.04上的ext4

解决方法

制作一个像这样的bash脚本:
#!/bin/bash
rm -- "$*"
sleep 0.5

例如,使用名称deleter.sh保存它.运行chmod u x deleter.sh使其可执行.

此脚本删除作为参数传递给它的所有文件,然后休眠0.5秒.

然后,你可以运行

find cache.bak -print0 | xargs -0 -n 5 deleter.sh

此命令检索cache.bak中所有文件的列表,并一次将五个文件名传递给删除脚本.

因此,您可以调整一次删除文件数,以及每次删除操作之间的延迟时间.

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...