linux 快速删除大量/大文件

经常会测试海量大数据,在不同文件系统下执行列出(list),删除(rm)等操作的执行时间,下面列出了,执行删除50万个文件时,使用不同的命令或者脚本,执行时间!

从上面可以看出,根据笔者之前用Hadoop,Spark等大数据使用rm命令来删除海量文件,耗时最长,且容量造成Hung机甚至系统崩溃!而使用find命令或者ls命令先列出,再通过管道传给-exec或者-delete来删除无疑是不错的选择,最快的可能就是使用Perl脚本和rsync命令来删除。

无论是海量文件或者是比较大的文件数,如果用rm和rsync做比较的话,比如说5万个文件,使用前者需要500秒,8分钟左右;而使用后者只需要10秒; 速度整整提升了50倍!

rsync --delete-before -avH --force -r /tmp/tmpdir /mnt/yourdir

原文链接:https://blog.csdn.net/Jerry_1126/article/details/79935157

https://blog.csdn.net/weixin_30664615/article/details/97148741?utm_medium=distribute.pc_relevant.none-task-blog-baidujs-3

1、先安装rsync:

  1. yum install rsync

2、建立一个空的文件夹:

  1. mkdir /tmp/test

3、用rsync删除目标目录:

  1. rsync --delete-before -a -H -v --progress --stats /tmp/test log

这样我们要删除的log目录就会被清空了,删除的速度会非常快

1、快速删除大量文件:

假如你要在linux下删除大量文件,比如100万、1000万,那么rm -rf *可能就不好使了。 rsync 可以用来清空目录或文件,如下:

1)先建立一个空目录

mkdir/data/blank

2)用rsync删除目标目录

rsync--delete-before -d /data/blank/ /var/spool/clientmqueue/

这样目标目录很快就被清空了

注:其中--delete-before 接收者在传输之前进行删除操作

2、快速删除大文件:

假如你有一些特别大的文件要删除,比如nohup.out这样的实时更新的文件,动辄都是几十个G上百G的,也可以用rsync来清空大文件,而且效率比较高。

1)创建空文件

touch/data/blank.txt

2)用rsync清空文件

rsync-a --delete-before --progress --stats /root/blank.txt /root/nohup.out

3、为什么rsync能够快速删除大文件?

1)rm命令大量调用了lstat64和unlink,可以推测删除每个文件前都从文件系统中做过一次lstat操作。过程:正式删除工作的第一阶段,需要通过getdirentries64调用,分批读取目录(每次大约为4K),在内存中建立rm的文件列表;第二阶段,lstat64确定所有文件的状态;第三阶段,通过unlink执行实际删除。这三个阶段都有比较多的系统调用和文件系统操作。

2)rsync所做的系统调用很少:没有针对单个文件做lstat和unlink操作。命令执行前期,rsync开启了一片共享内存,通过mmap方式加载目录信息。只做目录同步,不需要针对单个文件做unlink。

另外,在其他人的评测里,rm的上下文切换比较多,会造成System CPU占用较多——对于文件系统的操作,简单增加并发数并不总能提升操作速度。

总结:频繁做减法不如直接从头来过

把文件系统的目录与书籍的目录做类比,rm删除内容时,将目录的每一个条目逐个删除(unlink),需要循环重复操作很多次;rsync删除内容时,建立好新的空目录,替换掉老目录,基本没开销。

另一种方法---------------------------------------------------------------------------------------------------------------------------

https://m.jb51.net/article/105890.htm

linux服务器运行久了,可能会出现海量的垃圾文件去删除,下面这篇文章就给大家分享了在Linux下正确快速删除海量文件的方法,需要的朋友可以参考借鉴,下面来一起看看吧。

前言

注意本文说的“海量”并不是指体积大,而是指数量,比如一个目录下有数百万个小文件。

最近在优化服务器时发现postfix下的maildrop目录和clientmqueue目录下发现有大量的文件,进入这些目录里使用ls命令是愚蠢的做法,而直接执行rm * , 没有任何反应,文件数量也没有减少,也就是说,在海量文件目录里直接使用rm命令进行删除是无效的。

那么正确的方法是什么呢?有两种方法可选:

第一种:

find /path/to/directory -type f -exec rm {} \;

第二种:

ls -1 /path/to/directory | xargs -I{} rm {}

上面这两种方法可以成功的删除海量文件,速度也很快。但还有一种更好的方法,比如要删除上面提到的clientmqueue目录,里面全部是一个一个的邮件,用下面的方法:

service sendmail stop
cd /var/spool
mv clientmqueue clientmqueue-todelete
mkdir clientmqueue
chown --reference=clientmqueue-todelete clientmqueue
chmod --reference=clientmqueue-todelete clientmqueue
service sendmail start
rm -rf clientmqueue-todelete

上面的方法是将目录重命名,然后使用了 --reference 引用参数来重建目录,然后删除重命名的目录。直接删除目录的方法速度是十分的快。也可以留着备份不删。更安全。

linux 快速删除大量/大文件相关推荐

  1. Linux 快速删除大量小文件方法

    Linux 快速删除大量小文件方法     当我们在linux系统中要删除数万或者数十万甚至数百万的文件时使用rm -rf *就不太好用,因为要等待很长一段时间.在这种情况之下我们可以使用linux系 ...

  2. rm如何在Linux中删除一个大文件

    rm -rf命令是删除文件夹及其内容最快的方式之一. 仅仅一丁点的敲错或无知都可能导致不可恢复的系统崩坏. 下列是一些rm 命令的选项: rm 命令在Linux下通常用来删除文件. rm -r 命令递 ...

  3. Linux服务器操作系统快速删除大量/大文件

    前言 注意本文说的"海量"并不是指体积大,而是指数量,比如一个目录下有数百万个小文件.最近在优化服务器时发现postfix下的maildrop目录和clientmqueue目录还有 ...

  4. linux 快速删除大量小文件(数十万级别)

    进行以下两步操作即可: ​ # 第一步:创建空的文件夹: mkdir /tmp/blank# 第二步:执行以下命令: rsync --delete-before -d --progress /tmp/ ...

  5. linux快速删除大量目录,Linux 快速删除大量小文件方法

    当我们在linux系统中要删除数万或者数十万甚至数百万的文件时使用rm -rf *就不太好用,因为要等待很长一段时间.在这种情况之下我们可以使用linux系统命令rsync来巧妙的处理.rsync实际 ...

  6. linux快速删除60万文件,Linux下快速删除大量文件

    rsync --delete-before -d /tmp/empty/ /the/folder/you/want/delete/ 不要忘记文件夹后的"/" 附: rsync的跟删 ...

  7. Ubuntu快速删除大量小文件方法

    进行以下两步操作即可: 1.第一步:创建空的文件夹: mkdir /tmp/blank 2.第二步:执行以下命令:rsync --delete-before -d /tmp/blank/ /home/ ...

  8. 如何快速找出Linux系统中的大文件?

    今日主题: 如何快速找出Linux系统中的大文件? 在前面的文章中,我们讲到了压测时磁盘空间被占满的问题,可以跟今天的文章结合着看. 在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致 ...

  9. 【Linux】使用du、df 和 sort 命令快速找出Linux系统中的大文件

    在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致的报错,那么具体怎么查看磁盘空间的大小呢?怎么找到占用空间最大的文件呢? 使用df.du并结合sort,可以快速找到系统中的大文件! ...

最新文章

  1. ds图—最小生成树_Java: Kruskal算法生成最小生成树(邻接矩阵)
  2. Linux 内核里的“智能指针”【转】
  3. C#Socket通信
  4. 【Flink】Flink 基于事件序列最大值 AssignerWithPeriodicWatermarks
  5. 手把手教你学习网络编程(1)
  6. 视频怎么插入慢动作?
  7. 【UVA-10891】Game of Sum【区间DP】
  8. 前端特效 - 前置- - 01. 百叶窗
  9. 使用python代码调用三汇语音卡硬件拨打电话
  10. ARM内核全解析,从ARM7,ARM9到Cortex-A7,A8,A9,A12,A15到Cortex-A53,A57,A72
  11. PAT日志 1031
  12. 计算机登录账户删除著名恢复,win10系统删除计算机无用账户的恢复步骤
  13. 山东大学软件工程应用与实践——RIME输入法配置文件分析
  14. 一文了解公有云、私有云、混合云、边缘云、专有云、分布式云
  15. linux装软件需要root用户,Linux下非root用户安装软件的一般流程:
  16. 普元 AppServer 部署应用时报错:Exception while loading the app : CDI deployment failure
  17. 一次ORA-03113错误解决
  18. 如何进行产品设计,更能激发用户行为
  19. frame框架初步解析
  20. PHP个人发卡网源码支持当面付/码支付/易支付+免签即时到账全解密

热门文章

  1. 得到当前函数堆栈调用
  2. RGBA和ARGB的区别
  3. Windows操作系统产品名与内部版本号的对应(windows版本号)
  4. Linux core dump的详细介绍及使用
  5. Unix网络编程--进程间通信--管道通信
  6. Design Pattern - Iterator(C#)
  7. 大块数据申请及DMA
  8. php类使用场景,php类与对象得使用场景
  9. centos mysql 设置_CentOS下MySql优化及安全设置centos
  10. SpringBoot + WebMagic实现一个的爬虫框架