Linux下一次删除百万文件
Linux下一次删除百万文件
线上环境遇到的一个问题,文件数量过多,执行rm命令报错
# rm -f ./*
-bash: /bin/rm: Argument list too long
根据报错检查状态
# ls | wc -l
634084
# du -sh
64G
在线下环境进行故障复现
测试环境准备
# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/sda3 ext4 1.8T 331G 1.4T 20% /
tmpfs tmpfs 7.7G 0 7.7G 0% /dev/shm
/dev/sda1 ext4 190M 61M 120M 34% /boot
# grep name /proc/cpuinfo
model name : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz
model name : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz
model name : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz
model name : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz
model name : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz
model name : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz
# free -m
total used free shared buffers cached
Mem: 15709 1643 14066 8 452 559
-/+ buffers/cache: 631 15078
Swap: 8191 0 8191
# cat /etc/redhat-release
CentOS release 6.8 (Final)
# uname -r
2.6.32-642.1.1.el6.x86_64
测试生成测试数据
# for i in `seq 1000000`;do echo "${i}" >> ${i}.txt;done
# ls | wc -l
1000000
# du -sh
3.9G .
# ls *.txt
-bash: /bin/ls: Argument list too long
# rm -f ./*
-bash: /bin/rm: Argument list too long
方法1:使用for循环方式执行删除任务
# time for i in `ls ./`;do rm -f ${i};done
real 58m44.234s
user 8m59.930s
sys 37m16.453s
时间太长了,绝壁不能忍
方法2:直接删目录
# time rm -rf test && mkdir test
real 0m56.768s
user 0m1.453s
sys 0m22.603s
# du -sh test
4.0K test
速度不错,然而很多情况下不能直接删目录,有点蛋疼
方法3:使用 find + xargs 组合命令执行删除任务(网上流传最多的方法)
# time find ./ -type f | xargs -n 1 rm -f
real 18m30.267s
user 0m9.536s
sys 1m38.999s
# time find ./ -type f | xargs rm -f
real 16m16.774s
user 0m2.232s
sys 0m30.454s
一样蛋疼,如果需求是删除全部文件的话,用这种方法就太low了,适合删除部分数据的场景
方法4:使用 ls + xargs 组合命令执行删除任务
# time ls | xargs -L 100 rm -f
real 1m3.801s
user 0m7.054s
sys 0m28.582s
# time ls | xargs -L 1000 rm -f
real 0m55.917s
user 0m5.322s
sys 0m24.778s
# time ls | xargs -L 2000 rm -f
real 0m55.560s
user 0m5.209s
sys 0m24.702s
# time ls | xargs -L 5000 rm -f
real 0m55.057s
user 0m5.196s
sys 0m24.666s
# time ls | xargs -L 10000 rm -f
real 0m55.733s
user 0m5.121s
sys 0m24.657s
# time ls | xargs -L 100000 rm -f
xargs: argument list too long
real 0m4.018s
user 0m3.324s
sys 0m0.701s
速度杠杠滴~~但是注意文件名长度,选择合适的传参数量
方法5:使用rsync命令来执行删除任务
# mkdir /tmp/Null
# time rsync --delete-before -d /tmp/Null/ ./
real 0m56.386s
user 0m1.767s
sys 0m28.075s
# ll
total 0
# du -sh ./
29M ./
没什么优点,缺点是rsync命令比较冷门,参数不容易记住,用的机会也不多,作为拓展方法了解一下就好
如果你有其他好的方法,可以一起探讨一下~~
原创文章,侵权必究
Linux下一次删除百万文件的更多相关文章
- Linux服务器删除乱码文件和文件夹的方法
Linux服务器删除乱码文件和文件夹的方法 首页进入乱码文件所在文件夹由于php大势所趋,所以接触Linux服务器的机会越来越多.不同于Windows服务器,Linux服务器只支持数字.英文等字符,对 ...
- Linux上删除大量文件几种方式对比
目录 Linux上删除大量文件几种方式对比 1. rm删除:因为文件数量太多,rm无法删除(报错) 2. find查找删除:-exec 3. find查找删除:xargs 4. find调用-dele ...
- linux下删除大量文件提示参数过长解决办法
linux下删除大量文件提示参数过长解决办法:在当前目录下rm -rf * 在linux中删除大量文件时,直接用rm会出现:-bash: /bin/rm: 参数列表过长的错误. 这时可以用find命令 ...
- Linux下删除大量文件效率对比
来自公众号:马哥Linux运维 今天我们来测试一下Linux下面删除大量文件的效率. 首先建立50万个文件 $ test for i in $(seq 1 500000);do echo text ...
- Linux下删除的文件如何恢复
Linux下删除的文件如何恢复 参考自: [1]linux下误操作删除文件如何恢复 [2]Linux实现删除撤回的方法 以/home/test.txt为例 1.df -T 文件夹 找到当前文件所在磁盘 ...
- 如何恢复 Linux 上删除的文件,第 1 部分
来源:http://www.ibm.com/developerworks/cn/linux/l-cn-filesrc/ 原理及普通文件的恢复 要想恢复误删除的文件,必须清楚数据在磁盘上究竟是如何存储的 ...
- linux下删除乱码文件、目录
由于编码原因,在linux服务器上上传.创建中文文件或目录时,会产生乱码,如果想删除它,发现用rm命令是删除不了的 这种情况下,用find命令可以删除乱码的文件或目录. 首先进入乱码文件或目录所在的目 ...
- linux 下删除乱码文件-乾颐堂
在linux下删除文件,遇到特殊字符是一件非常头疼的事情. 1. 如果文件名带 ‘-’ 或者‘--’这样的字符 删除办法为:rm -- 文件名 如文件名为:-pythontab.tgz 如果用普通方法 ...
- Linux rm 删除指定文件外的其他文件 方法汇总
一.Linux下删除文件和文件夹常用命令如下: 删除文件: rm file 删除文件夹: rm -rf dir 需要注意的是, rmdir 只能够删除 空文件夹 . 二.删除制定文件(夹)之外的所有文 ...
随机推荐
- 图片格式 WebP APNG
WebP 是一种支持有损压缩和无损压缩的图片文件格式,派生自图像编码格式 VP8.根据 Google 的测试,无损压缩后的 WebP 比 PNG 文件少了 45% 的文件大小,即使这些 PNG 文件 ...
- SQL Server 2008 R2 企业版 MSDN原版
经网友建议,提供常用试验用资源.以下软件或系统仅为完成本博客内的各种实验而提供下载. 所有软件.系统均为该软件发布方提供的原版文件,未经任何修改.破解等操作.使用目的仅限于学习.测试及实验,符合国家相 ...
- ueditor插入百度音乐无法播放-403 问题
简单记录一下,其实403是因为百度音乐设置了禁止外部连接引用,因此 几乎所有的百度音乐播放都会提示403. 注意:预览页面(dialog/music/music.html)和实际插入页面(uedito ...
- 从零开始搭建Vue组件库——VV-UI
前言: 前端组件化是当今热议的话题之一,也是我们在开发单页应用经常会碰到的一个问题,现在我们有了功能非常完善的Element-UI.各个大厂也相继宣布开源XXX-UI.但是也会存在一些问题,比如每个公 ...
- C#编程命名规范推荐
1.用Pascal规则来命名方法和类型. Pascal 大小写形式是指名称中的单词的第一个字母大写public class DataGrid{public void DataBind(){ }} 2. ...
- C#中SQL语句参数写法
OracleConnection oc=new OracleConnection("data source=osserver;User Id=****;password=**"); ...
- SQL Server多表同时查询
今天在练sql server发现多条语句同时使用可以多表同时查询,具体操作如下: 代码示例: USE teachingGOSELECT *FROM dbo.teach_classORDER BY cl ...
- Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法
找到Help Viewer程序的位置(可以使用Everything工具搜索microsoft help找到),发送到桌面快捷方式,打开此快捷方式的属性,在目标的最后添加下面那行字,然后即可通过快捷方式 ...
- Java并发之线程管理(线程基础知识)
因为书中涵盖的知识点比较全,所以就以书中的目录来学习和记录.当然,学习书中知识的时候自己的思考和实践是最重要的.说到线程,脑子里大概知道是个什么东西,但很多东西都还是懵懵懂懂,这是最可怕的.所以想着细 ...
- SSE图像算法优化系列十二:多尺度的图像细节提升。
无意中浏览一篇文章,中间提到了基于多尺度的图像的细节提升算法,尝试了一下,还是有一定的效果的,结合最近一直研究的SSE优化,把算法的步骤和优化过程分享给大家. 论文的全名是DARK IMAGE ENH ...