linux下用rm -rf *删除大量文件太慢怎么解决?

王朝干货 · 作者: 佚名 2023-08-08
  字体: |||超大
 
Text

在Linux系统中,有时删除大文件会十分缓慢,这可能会让用户很头痛。此问题主要是由于Linux文件系统使用虚拟文件系统(virtual file system)技术而造成的。虚拟文件系统是由文件系统缓存(File System Cache)来驱动的,它的作用类似于电脑的内存,可以有效地减少磁盘的访问。

对于文件的删除,Linux系统更喜欢把它当作一个记录,而不是真正的删除文件。当调用删除文件的指令时,Linux系统只是在虚拟文件系统中把文件的记录改为“不可见”,即使查看目录也不会显示出来,但实际上文件还在磁盘上。当你后续尝试通过编程或Linux命令写入文件时,Linux系统才真正把文件删除。

因此,删除大文件会极慢,而且会占用不少磁盘空间。尤其是存在大量文件夹及文件时尤其明显,因为需要清理大量“已被删除”的磁盘文件。有时重启系统也不 能够删除文件,必须改变文件系统的实现才能释放磁盘空间。

# rm -rf *

通常,在linux下,我们用rm来删除文件。但是当文件数量巨大时,rm会很慢。这是因为,rm命令删除内容时,会把目录的每个条目逐个删除,需要循环重复N多次,当文件特别多时硬件开销特别大。

解决方案一:

# rsync --delete-before -d /yourdir/temp/ /yourdir/cache/

使用rsync,新建一个临时的空目录,然后通过rsync指令用空文件夹覆盖掉目标文件夹。rsync删除内容时,是把建立好新的空目录来替换掉老目录,基本没开销,速度极快,但是你可能需要先安装rsync。

解决方案二:

# find ./ | xargs rm -rf

或者

# find ./ > file
# cat file | xargs rm -rf

这个速度虽然还是很慢,但比直接用rm -rf *快不少。如果文件很多很多,建议还是使用rsync。

 
 
Recommend
 
>>返回首頁<<