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 引用参数来重建目录,然后删除重命名的目录。直接删除目录的方法速度是十分的快。也可以留着备份不删。更安全。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Linux恢复删除文件的lsof命令详解

    lsof命令 lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行. 在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件.所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操

  • Windows和Linux下定时删除某天前的文件的脚本

    以前做到最多的定时我们就是定时备份功能了,我们常用利用定时功能来备份网站数据或备份数据库了,下面我来给(www.jb51.net)大家介绍几个Linux与Windows中定时删除某天前的文件方法,这个与备份有点区别,但大同小义了. Windows下bat文件内容如下: 复制代码 代码如下: @echo off forfiles -p "D:\servers\apache2.2\logs" -s -m *.log -d -15 -c "cmd /c del @path"

  • linux实现除了某个文件或某个文件夹以外的全部删除

    比如一个目录下有1,2,3,4,5这五个文件,现在我需要删除除了2以外的所有文件,那么我可以使用 find . ! -name 2 -exec rm -f {} \; 当然你还可以配合着 -maxdepth 来更精准的删除了. 下面演示删除的范围仅限于当前目录. find . -maxdepth 1 ! -name 2 -exec rm -f {} \; 下面提供Linux下find命令的详细使用方法 在目录结构中搜索文件,并执行指定的操作.此命令提供了相当多的查找条件,功能很强大. 语法:fi

  • linux删除无效链接文件脚本分享

    Linux终端下执行,用于删除无效的链接文件. 复制代码 代码如下: #!/bin/sh usage(){    echo "RemoveBroken 0.1, a shell script to remove broken link files."    echo "License: MIT, (c) chenzhiqiang"    echo "Usage:"    echo "  $0 --help           print

  • linux下mysql自动备份数据库与自动删除临时文件

    一.每日23:00自动删除临时文件 首先查看一下crontab的任务列表:crontab -l然后新建:crontab -e添加一行:00 03 * * * rm -rf /www/cmstest/my120/public/scripts/jpgraph/*保存退出.重启服务:  /etc/rc.d/init.d/crond restart 二.每日24:00自动备份数据库 利用系统crontab来定时执行备份文件,按日期对备份结果进行保存,达到备份的目的. 1.创建保存备份文件的路径/mysq

  • linux 不删除文件,清空文件中内容的命令

    在某些时候,需要清空文件内容,而不删除文件.比喻有些日志文件(log.txt):在linux下的命令为:true >log.txt 测试结果: touch log.txt →#新建文件log.txt vi log.txt →#编辑文件 随便输入什么东西 :wq!回车 →#保存退出: cat log.txt →#查看 文件内容: true >log.txt →#查看文件里面的内容: 附: rm -r 删除目录,不管目录中有没有文件 rm -rf 强制删除,没有提示 一般用到的就这两个,删除文件可

  • linux删除大量文件的6种方法

    首先建立50万个文件 复制代码 代码如下: test  for i in $(seq 1 500000)for> dofor> echo test >>$i.txtfor> done 1 rm 复制代码 代码如下: test  time rm -f *zsh: sure you want to delete all the files in /home/hungerr/test [yn]? yzsh: argument list too long: rmrm -f *  3.

  • linux下删除带-号的文件

    不知为何主目录下突然多了个-sV文件,目测是因为nmap的-sV参数产生的. 写下来权当做个笔记~ 现在来模拟下当时的情况 touch -- -sV touch ./-sV # 两种都行 现在工作目录底下会产生一个文件名为-sV的文件 如果执行 rm -sV 会产生一个错误 rm: invalid option -- 's' Try 'rm --help' for more information. 原因是无效的参数s 本来打算Google下看看的,结果rm --help就看到答案了 To re

  • Linux中删除文件内空行的4种方法

    在Linux上处理一些数据文件时,有时候需要将其中的空行过滤掉,系统中提供的各种工具都可以完成这个功能.将常用的介绍如下吧:1. grep 复制代码 代码如下: grep . data.txtgrep -v '^$' data.txtgrep '[^$]' data.txt 2. sed 复制代码 代码如下: sed  '/^$/d' data.txtsed '/^\s*$/d' data.txt   #这个命令还可将完全空格.tab等组成的空行删掉.# The character class

  • Linux 中清空或删除大文件内容的五种方法

    在 Linux 终端下处理文件时,有时我们想直接清空文件的内容但又不必使用任何Linux命令行编辑器 去打开这些文件.那怎样才能达到这个目的呢?在这篇文章中,我们将介绍几种借助一些实用的命令来清空文件内容的方法. 注意: 由于再Linux中一切皆文件,你需要时刻注意,确保你将要清空的文件不是重要的用户文件或者系统文件.清空重要的系统文件或者配置文件可能会引发严重的应用失败或者系统错误. 提示:在下面的示例中,我们将使用名为 access.log 的文件来作为示例样本. 1. 通过重定向到 Nul

随机推荐