Linux删除大量小文件的方式

教程大全Linux,rsync

今天给一个服务器清理存储空间,有个站点的缓存目录有大量的小文件无法通过常规方式删除。目录不到300个,里面文件数量大概有700万左右。

宝塔面板读一下目录就会直接卡死,rm命令对于目录内超过10000个文件的也无法进行删除。通过查找资料发现可以使用rsync进行操作,下面介绍下删除方式。

教程步骤

rm 删除方式

rm -rf /www/wwwroot/test/runtime

因为文件夹内文件数量过多,rm无法完成删除。适合一些数量较少的目录使用。

rsync 删除方式

我们是利用rsync的同步功能来完成删除效果的。所以我们先找个其他的空目录,然后使用rsync将要删除的目录往新建的空目录同步,在同步过程中所有文件全部删除。

假设新建的空目录为:/home/wwwroot/111/

要删除的目录为:/home/wwwroot/222/

那么命令就是

rsync --delete-before -a -H --stats /home/wwwroot/111/ /home/wwwroot/222/

参数释义

–delete-before, 接收者在传输之前进行删除文件操作。先将目录内的文件全部删除,然后再同步,此时目录内已经没有文件了,只会将空目录同步过去。
-a, –archive 归档模式。表示以递归方式传输文件,并保持所有文件属性
-H, –hard-links 保留硬链结
–stats, 给出某些文件的传输状态

实际操作效果

 

rsync更多参数

-a,–archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-v,–verbose 详细模式输出
-p,–perms 保持文件权限
-g,–group 保持文件属组信息
-o,–owner 保持文件属主信息
-r,–recursive 对子目录以递归模式处理。同步目录的时候要加上这个参数
-l,–links 保留软链结,加上这个参数,同步过来的文件会保持之前的软链接属性不变
-H,–hard-links 保留硬链结
-e,–rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
-z,–compress 对备份的文件在传输时进行压缩处理
–stats给出某些文件的传输状态
–progress打印同步的过程
–timeout=TIME同步过程中,IP超时时间,单位为秒
–delete删除那些目标目录中有而源目录中没有的多余文件。这个是rsync做增量方式的全备份的最佳选择方案!!!!!!
–delete-before接受者在输出之前进行删除操作。即先将目标目录中文件全部删除,再将源目录文件拷贝过去。这是rsync保持目标目录跟源目录一致的方案!!!
–delete-after在同步操作之后做比较,删除那些目标目录中有而源目录中没有的多余文件
–delete-excluded删除目标目录中那些被该选项指定排除的文件
–ignore-errors即使出现IO错误也进行删除,忽略错误
–exclude指定同步时需要过滤掉的文件或子目录(即不需要同步过去的),后面直接跟不需要同步的单个文件名或子目录(不需要跟路径) ,过滤多个文件或子目录,就使用多个–exclude
–exclude-from指定同步时需要过滤掉的文件或子目录,后面跟文件(比如/root/exclue.txt),然后将不需要同步的文件和子目录放到/root/exclue.txt下。
–version打印版本信息
–port=PORT指定其他的rsync服务端口
–log-format=formAT指定日志文件格式
–password-file=FILE从FILE中得到密码
–bwlimit=KBPS限制I/O带宽,KBytes per second

 

Posted by 柴郡猫