当前位置: 首页 > news >正文

Linux 递归删除大量的文件

一般情况下

在 Ubuntu 中,递归删除大量文件和文件夹可以通过以下几种方式快速完成。常用的方法是使用 rm 命令,配合一些适当的选项来提高删除速度和效率。

1. 使用 rm 命令递归删除

最常见的方式是使用 rm 命令的递归选项 -r 来删除目录及其所有内容。

rm -rf /path/to/directory 
  • -r:递归删除目录中的所有文件和子目录。
  • -f:强制删除,即使文件是只读的或不提示确认。

2. 提高删除速度的技巧

在某些情况下,使用 rm 删除大量文件可能比较慢。以下是一些加速删除的技巧:

a. 避免磁盘写入同步 (sync)

在删除大量文件时,系统会自动进行磁盘写入同步操作,这可能会影响速度。你可以在删除文件之前临时关闭文件系统的写入同步:

sudo sync; echo 3 | sudo tee /proc/sys/vm/drop_caches 

这将确保系统缓存中的数据写入磁盘,并清空文件系统缓存。虽然不会直接加速删除过程,但可以减少潜在的I/O延迟。

b. 调整 I/O 调度器(高级)

你可以尝试临时更改文件系统的 I/O 调度器,例如将调度器改为 noopdeadline,这样可以加速文件删除操作。不过,这通常适用于 SSD。

echo noop | sudo tee /sys/block/sdX/queue/scheduler 

sdX 替换为你的硬盘设备。

c. 并行删除

可以使用 find 命令结合 xargs 来并行化删除过程,充分利用多核 CPU。这种方法可以显著加快删除速度。

find /path/to/directory -type f -print0 | xargs -0 -P 8 rm -f 
  • -type f:只查找文件。
  • -print0:防止文件名中的特殊字符(如空格)造成问题。
  • xargs -0 -P 8:并行删除,-P 8 表示使用 8 个线程并行执行删除操作。

同样,你也可以递归删除子目录:

find /path/to/directory -type d -empty -delete 

3. 使用 rsync 快速清空目录

虽然 rsync 通常用于文件同步,但你可以利用它来快速删除目录中的所有文件。这里我们使用 rsync 将一个空目录同步到目标目录,从而清空该目录:

mkdir /tmp/empty && rsync -a --delete /tmp/empty/ /path/to/directory/ 

这会递归删除 /path/to/directory/ 中的所有文件和子目录。

4. 使用 ionice 降低系统负载

在删除大量文件时,系统 I/O 可能会变得非常繁忙,影响系统的响应速度。你可以使用 ionice 来降低删除过程对系统其他进程的影响:

ionice -c 3 rm -rf /path/to/directory 
  • -c 3:设置 rm 命令为最低的 I/O 优先级,确保系统其他操作不会受到影响。

5. 注意事项

  • 小心使用 rm -rf:这是一条非常危险的命令,误用可能导致重要数据丢失。请确保删除的目录路径正确无误。
  • 备份重要文件:在进行大规模删除之前,建议备份重要数据。
  • 磁盘性能:如果你使用的是机械硬盘 (HDD),删除大量文件的速度可能较慢。对于 SSD,速度会快得多。

通过上述方法,可以有效地加快递归删除大量文件和文件夹的速度,尤其是使用 findxargs 进行并行删除时,性能提升显著。

对于机械硬盘

在机械硬盘 (HDD) 上使用多线程进行删除操作 通常不适用,而且可能不会带来明显的性能提升,甚至可能导致性能下降。这是由于机械硬盘的物理特性决定的。

原因

  1. 机械硬盘的寻道时间

    • 机械硬盘的瓶颈在于它的 寻道时间(磁头定位到正确的扇区所需的时间)。多线程删除会导致多个线程同时试图删除不同区域的文件,这会迫使磁头频繁在不同位置间移动,增加了寻道的次数,从而减慢删除速度。
  2. 顺序读取/写入 vs. 随机读取/写入

    • 机械硬盘的顺序读取和写入性能明显高于随机操作。单线程删除文件时,磁头通常可以顺序地遍历目录并删除文件,效率较高。而多线程删除会导致多个线程竞争 I/O 资源,硬盘磁头频繁地在不同位置来回移动,导致随机 I/O 操作增多,降低了效率。
  3. 多线程 I/O 争用

    • 在 HDD 上并行删除文件,会使多个线程同时发起 I/O 请求。这些并行的 I/O 请求会相互争用硬盘资源,反而会进一步加剧机械硬盘的负载,降低操作效率。

机械硬盘上删除文件的优化策略

虽然多线程删除不适用于机械硬盘,但你可以通过以下方式优化删除操作:

  1. 使用单线程删除

    • 在机械硬盘上,单线程删除通常效率更高,因为它能够让磁头顺序移动,减少寻道时间。直接使用 rm -rffind 命令来逐步删除文件是最稳妥的选择。

    示例:

    rm -rf /path/to/directory 

    find /path/to/directory -type f -delete 
  2. 分批删除

    • 如果要删除的文件数量非常大,可以通过分批删除减少系统资源占用。比如,使用 find 命令结合 xargs,删除指定数量的文件(如每次 1000 个):
    find /path/to/directory -type f | head -n 1000 | xargs rm 
  3. 减少 I/O 优先级

    • 为了避免删除操作对其他系统操作产生影响,可以使用 ionice 降低删除进程的 I/O 优先级:
    ionice -c 3 rm -rf /path/to/directory 

    这样可以让删除操作在后台更平稳地进行,而不会对前台的其他操作造成太大的影响。

  4. 使用 nocache 选项

    • 在删除大量文件时,可以使用 nocache 选项避免文件系统缓存被大量文件操作占用。
    rm -rf --nocache /path/to/directory 

SSD 上的多线程删除

相比之下,多线程删除更适用于 SSD,因为 SSD 没有机械磁头和寻道时间问题。SSD 在处理并行 I/O 时表现得更好,多个线程同时进行删除操作不会显著增加延迟。因此,如果你使用的是 SSD,可以考虑使用多线程删除来加速操作。

相关文章:

Linux 递归删除大量的文件

一般情况下 在 Ubuntu 中,递归删除大量文件和文件夹可以通过以下几种方式快速完成。常用的方法是使用 rm 命令,配合一些适当的选项来提高删除速度和效率。 1. 使用 rm 命令递归删除 最常见的方式是使用 rm 命令的递归选项 -r 来删除目录及其所有内容。…...

设计一个算法,找出由str1和str2所指向两个链表共同后缀的起始位置

假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀存储空间,例如,’loading’和’being’的存储映像如下图所示。 设str1和str2分别指向两个单词所在单链表的头结点,链表结点结构为 data…...

Python中如何判断一个变量是否为None

在Python中,判断一个变量是否为None是一个常见的需求,特别是在处理可选值、默认值或者是在函数返回结果可能不存在时。虽然这个操作本身相对简单,但围绕它的讨论可以扩展到Python的哲学、类型系统、以及如何在不同场景下优雅地处理None值。 …...

表观遗传系列1:DNA 甲基化以及组蛋白修饰

1. 表观遗传 表观遗传信息很多为化学修饰,包括 DNA 甲基化以及组蛋白修饰,即DNA或蛋白可以通过化学修饰添加附加信息。 DNA位于染色质(可视为微环境)中,并不是裸露的,因此DNA分子研究需要跟所处环境结合起…...

Android 跳转至各大应用商店应用详情页

测试通过机型品牌: 华为、小米、红米、OPPO、一加、Realme、VIVO、IQOO、荣耀、魅族、三星 import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; import android.content.pm.PackageInfo; import …...

Pywinauto鼠标操作指南

Pywinauto是一个强大的Python库,用于自动化Windows桌面应用程序的测试。它提供了一系列工具和API来模拟用户输入,包括键盘、鼠标事件,以及与各种窗口控件交互的能力。本文将详细介绍如何使用Pywinauto来执行鼠标操作,并通过一些示…...

VRAY云渲染动画怎么都是图片?

动画实际上是由一系列连续的静态图像(帧)组成的,当这些帧快速连续播放时,就形成了动画效果。每一帧都是一个单独的图片,需要单独渲染。 云渲染农场的工作方式: 1、用户将3D场景文件和动画设置上传到云渲染…...

共享内存(C语言)

目录 一、引言 二、共享内存概述 1.什么是共享内存 2.共享内存的优势 三、共享内存的实现 1.创建共享内存 2.关联共享内存 3.访问共享内存 4.解除共享内存关联 5.删除共享内存 四、共享内存应用实例 五、总结 本文将深入探讨C语言中的共享内存技术,介绍其原理、…...

《JavaEE进阶》----16.<Mybatis简介、操作步骤、相关配置>

本篇博客讲记录: 1.回顾MySQL的JDBC操作 2..Mybatis简介、Mybatis操作数据库的步骤 3.Mybatis 相关日志的配置(日志的配置、驼峰自动转换的配置) 前言 之前学习应用分层时我们知道Web应用程序一般分为三层,Controller、Service、D…...

HuggingFists算子能力扩展-PythonScript

HuggingFists作为一个低代码平台,很多朋友会关心如何扩展平台算子能力。扩展平台尚不支持的算子功能。本文就介绍一种通过脚本算子扩展算子能力的解决方案。 HuggingFists支持Python和Javascript两种脚语言的算子。两种语言的使用方式相同,使用者可以任选…...

WInform记录的添加和显示

1、程序 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms;namespace ComboBoxApp {public part…...

★ C++基础篇 ★ string类的实现

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将继续和大家一起学习C基础篇第五章下篇----string类的模拟实现 ~ 上篇&#xff1a;★ C基础篇 ★ string类-CSDN博客 C基础篇专栏&#xff1a;★ C基础篇 ★_椎名澄嵐的博客-CSDN博客 目录 一 基础结构 二 迭代器 …...

rman compress

级别 初始 备完 耗时 low 1804 3572 0:10 High 1812 3176 2:00 MEDIUM 1820 3288 0:13 BASIC 1828 3444 0:56 ---不如MEDIUM&#xff0c;时间还长 NO COMPRESS 1820 5924 0:5 R…...

创建一个Oracle版本的JDK的Docker镜像

背景说明 OpenJDK 和Oracle JDK 一般情况下我们选择OpenJDK&#xff0c;两者针对大部分场景都可以满足&#xff0c;有些地方例如反射技术获得某些包路径下的类对象等&#xff0c;有时候选择OpenJDK会导致空指针异常。 两者在底层实现方面有部分区别。 创建镜像 这里是Linux…...

Harmony OS DevEco Studio 如何导入第三方库(以lottie为例)?-- HarmonyOS自学2

在做鸿蒙开发时&#xff0c;离不开第三方库的引入 一.有哪些支持的Harmony OS的 第三方库&#xff1f; 第三方库下载地址&#xff1a; 1 tpc_resource: 三方组件资源汇总 2 OpenHarmony三方库中心仓 二. 如何加入到DevEco Studio工程 以 lottie为例 OpenHarmony-TPC/lot…...

JAVA数据导出为Excel

目录 一、导入依赖 二、使用的相关类 1、XSSFWorkbook 构造方法 创建表 操作表 保存表 样式和格式 日期处理 密码保护 其他 2、XSSFSheet 获取属性和信息 行操作 列操作 表的属性 合并单元格 保护表 页眉和页脚 注释 其它 3、XSSFRow 获取属性和信息 单…...

【数据结构与算法 | 灵神题单 | 快慢指针(链表)篇】力扣876, 2095, 234

1. 力扣876&#xff1a;链表的中间节点 1.1 题目&#xff1a; 给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,…...

第十五届蓝桥杯图形化省赛题目及解析

第十五届蓝桥杯图形化省赛题目及解析 一. 单选题 1. 运行以下程序&#xff0c;角色会说( )? A、29 B、31 C、33 D、35 正确答案&#xff1a;C 答案解析&#xff1a; 重复执行直到m>n不成立&#xff0c;即重复执行直到m<n。所有当m小于或者 等于n时&…...

linux下NTP服务器实战(chrony软件)

linux下NTP服务器实战(chrony软件) 记录linux下NTP服务器搭建及相关管理操作&#xff0c;使用chrony软件包安装部署。相比ntp服务&#xff0c;Chrony服务适用于更高精度、更高稳定性、自动化等场景。 1. 安装 chrony 在大多数Linux发行版上&#xff0c;chrony可以通过包管理…...

Java设计模式之命令模式介绍和案例示范

一、命令模式简介 命令模式&#xff08;Command Pattern&#xff09;是一种行为型设计模式&#xff0c;它将请求封装为一个对象&#xff0c;从而使你可以用不同的请求对客户端进行参数化、对请求排队或记录日志&#xff0c;以及支持可撤销的操作。命令模式的核心思想是将发出请…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

mongodb源码分析session执行handleRequest命令find过程

mongo/transport/service_state_machine.cpp已经分析startSession创建ASIOSession过程&#xff0c;并且验证connection是否超过限制ASIOSession和connection是循环接受客户端命令&#xff0c;把数据流转换成Message&#xff0c;状态转变流程是&#xff1a;State::Created 》 St…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件

今天呢&#xff0c;博主的学习进度也是步入了Java Mybatis 框架&#xff0c;目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学&#xff0c;希望能对大家有所帮助&#xff0c;也特别欢迎大家指点不足之处&#xff0c;小生很乐意接受正确的建议&…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...

写一个shell脚本,把局域网内,把能ping通的IP和不能ping通的IP分类,并保存到两个文本文件里

写一个shell脚本&#xff0c;把局域网内&#xff0c;把能ping通的IP和不能ping通的IP分类&#xff0c;并保存到两个文本文件里 脚本1 #!/bin/bash #定义变量 ip10.1.1 #循环去ping主机的IP for ((i1;i<10;i)) doping -c1 $ip.$i &>/dev/null[ $? -eq 0 ] &&am…...

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题

20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起&#xff0c;为了跨网段推流&#xff0c;千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...

本地部署drawDB结合内网穿透技术实现数据库远程管控方案

文章目录 前言1. Windows本地部署DrawDB2. 安装Cpolar内网穿透3. 实现公网访问DrawDB4. 固定DrawDB公网地址 前言 在数字化浪潮席卷全球的背景下&#xff0c;数据治理能力正日益成为构建现代企业核心竞争力的关键因素。无论是全球500强企业的数据中枢系统&#xff0c;还是初创…...

Java高级 |【实验八】springboot 使用Websocket

隶属文章&#xff1a;Java高级 | &#xff08;二十二&#xff09;Java常用类库-CSDN博客 系列文章&#xff1a;Java高级 | 【实验一】Springboot安装及测试 |最新-CSDN博客 Java高级 | 【实验二】Springboot 控制器类相关注解知识-CSDN博客 Java高级 | 【实验三】Springboot 静…...

【Elasticsearch基础】Elasticsearch批量操作(Bulk API)深度解析与实践指南

目录 1 Bulk API概述 1.1 什么是批量操作 1.2 Bulk API的优势 2 Bulk API的工作原理 2.1 请求处理流程 2.2 底层机制 3 Bulk API的使用方法 3.1 基本请求格式 3.2 操作类型示例 3.3 响应格式 4 Bulk API的最佳实践 4.1 批量大小优化 4.2 错误处理策略 4.3 性能调…...