Linux下一遍删除百万文本

Linux下删除多量小文件

Linux下文件的inode定义了文本的高低、全体人等文件的特色。每种文件和目录都有本人唯一的inode数字。可是为啥用inode来删除文件,而不是用常用的rm
-rf命令呢?原因是,若是您一点都不小心成立了包蕴特殊字符的文件和目录,比方含有
? * ^
的公文名,就能够很难删除。上面大家就来介绍一下:一)怎样寻找文件和目录的inode;二)协作find命令,删除特定的inode文件;三)其余有效的去除顽固文件的办法。

线上意况碰着的三个主题材料,文件数量过多,施行rm命令报错

 

* 怎么样找寻文件的inode?

# rm -f ./*

在Linux下使用 “rm -rf *”
试图删除很大气的小文件时,恐怕会报类似上面的失实:

用stat 可能ls -il 。带有 -i 参数的ls命令,正是指呈现文件的inode。

-bash: /bin/rm: Argument list too long

Linux下一次删除百万文件,Linux下用文件的inode删除文件。 

* 找到inode后,怎么着删除那一个文件?

基于报错检查情状

/bin/rm: Argument list too long.

find . -inum [inode数字] -exec rm -i {} \;

# ls | wc -l

   

一)上面大家全体实验一下,创立二个带特殊字符的文本:

634084

    那是因为通配符”*”在实践时会被各样相称的公文名来替换,举个例子“rm -rf
file一 file2 file3 file四″。

$ cd /tmp

# du -sh

系统只分红了二个非常小的缓冲区用来对那一个列表举行排序,倘诺那几个缓冲区满了,则shell不能够奉行这一个命令。

$ touch “\+Xy \+\8″

64G

 

$ ls

在线下情形举行故障复现

   
为了解决这几个标题,很四人利用find命令来操作。即用find查找每三个文本,然后把文件名1个接3个的传递个rm命令,方式如下:

贰)尝试用rm命令删除

测试景况计划

 

$ rm \+Xy \+\8

# df -Th

find . -type f -exec rm -v {} \;

三)寻觅那些文件的inode数字

Filesystem     Type   Size  Used Avail Use% Mounted on

 

$ ls -il

/dev/sda3      ext4   1.8T  331G  1.4T  20% /

   
不过那些法子对于数据巨大的文书时那多少个缓慢,比方自个儿早就删除过四个索引下的200W+个小文件。

342137 -rw-r–r– 1 tw tw 0 2008-11-20 08:57 \+Xy \+\8

tmpfs          tmpfs  7.7G     0  7.7G   0% /dev/shm

 

4)34二壹三七正是我们要找的inode数字。上面用find命令删除它

/dev/sda1      ext4   190M   61M  120M  34% /boot

    办法正是行使find命令内置的 “-delete” 参数
,使用这种情势删除文件,速度差不离是
三千个文件/秒,速度比以前方法得到巨大提升。当然也得以加上
“-print”参数来呈现每种删除的文件。

$ find . -inum 342137 -exec rm -i {} \;

# grep name /proc/cpuinfo

 

比方,你的种类中有”贰零零八/11/20″那个文件,用rm是去除不了的。Linux不允许你建设构造那一个文件,但是Windows下就能够。所以find协作inode的用处就在这边。

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

find . -type f -delete

上面介绍一下其余有效的删减手艺:

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

find . -type d -print -delete  

* 能够尝尝用文件名加引号的格局删除文件。比方 “–help”文件,能够用rm
“–help”删除

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

   不过本人不提议加那个参数,如若您要察看删除文件的速度,笔者建议选用df -i
命令来查看indoe节点的变化情形。

* 也得以用unlink删除文件。unlink
。unlink命令调用unlink函数,可以去除贰个一定文件

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

 

*
用mtools删除Windows下开创的非官方文件。这种格局在find命令合作inode失效时,最为可行。特地对付autorun.inf病毒成立的文书夹。

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

在Linux下使用 rm -rf *
试图删除不小气的小文件时,恐怕会报类似上面的一无可取: /bin/rm: Argument
list too long. 那是因为通…

也得以xargs合作rm批量删除在分裂岗位的文本:把待删文件的总体路线都写入三个文件文件,如file.txt内容如下:

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

file1

# free -m

/tmp/file2.txt

             total       used       free     shared    buffers    
cached

~/data.txt

Mem:         15709       1643      14066          8        452       
559

下一场运转下边包车型客车命令删除file.txt中所列的公文

-/+ buffers/cache:        631      15078

$ xargs rm

Swap:         8191          0       8191

图片 1

# 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

网站地图xml地图