Skip to content

使用Rsync快速删除海量文件

原理概述

传统的rm -rf命令在处理海量文件时效率极低,因为它需要逐个遍历并删除每个文件,这个过程会产生大量的磁盘I/O操作。相比之下,rsync通过目录同步的方式删除文件,其原理是使用一个空目录与目标目录进行同步,rsync会高效地识别并删除目标目录中多余的文件,而不需要逐个遍历,因此删除效率大大提高。

前提条件

确保系统已安装rsync工具,大多数Linux发行版默认已安装:

bash
# Ubuntu/Debian系统
sudo apt-get install rsync

# CentOS/RHEL系统
sudo yum install rsync

基本操作步骤

1. 创建临时空目录

首先创建一个临时的空目录,作为rsync的源目录:

bash
mkdir -p /tmp/empty_dir/

2. 使用rsync删除文件

使用rsync命令删除目标目录下的内容:

bash
rsync --delete-before --force --progress -a --ignore-errors /tmp/empty_dir/ /mnt/nfs2/

命令参数详解:

  • --delete-before: 在传输文件之前先删除目标位置多余的文件
  • --force: 强制删除非目录文件
  • --progress: 显示删除进度
  • -a: 归档模式,保持文件属性
  • --ignore-errors: 忽略I/O错误继续执行
  • /tmp/empty_dir/: 源目录(空目录)
  • /mnt/nfs2/: 目标目录

排除特定文件/目录

如果需要删除目标目录下的大部分内容,但保留某些文件或目录,可以使用--exclude参数:

bash
rsync --delete-before --force --progress -a --ignore-errors \
      --exclude='/t/' \
      /tmp/empty_dir/ /mnt/nfs2/

这样可以删除/mnt/nfs2目录下的所有内容,但保留t目录不被删除。

性能对比

使用rsync方法删除一千万个文件仅需约6秒,而传统的rm -rf命令可能需要数小时才能完成同样的操作,特别是在网络文件系统(NFS)上,性能差异更加明显。

注意事项

⚠️ 高风险操作:此操作将永久删除目标目录中的所有文件,请在执行前确保已备份重要数据。

  1. 确保目标路径正确,避免误删重要数据
  2. 在执行大规模删除操作前,建议先进行小规模测试
  3. 删除过程中保持系统稳定,避免强制中断操作
  4. 操作完成后,可以删除临时空目录:rm -rf /tmp/empty_dir/

用心记录,持续学习 | CNB