Linux如何在目录下灵活创建、浏览、删除百万个文件

文章目录

    • 一、创建百万级小文件
      • 1、单核CPU情况
      • 2、多核CPU情况
      • 3、执行效率对比
        • 3.1、单核的顺序执行
        • 3.2、多核的并发执行
    • 二、如何列出/浏览这些文件
      • 1、查看目录下文件的数量
      • 2、列出?
      • 3、ls -f(关闭排序功能)
        • 3.1、执行效率对比
      • 4、通过重定向导入到文件中浏览对应的文件名
    • 三、如何快速删除目录下所有文件
      • 1、rm -f ./* ?
      • 2、将整个目录名作为参数传递给rm命令
      • 3、使用find配合-delete参数
    • 四、需要保留指定文件怎么办
      • 1、创建一个文件列出需要保留的文件名(一行一个文件名)
      • 2、创建一个名为empty的空目录
      • 3、使用rsync命令
        • 3.1、命令详解
      • 4、检查源目录是否保留了指定文件

一、创建百万级小文件

1、单核CPU情况

seq 1000000 |xargs -i dd if=/dev/zero of={}.data bs=1024 count=1 &> /dev/null
#生成一百万个大小为1KB、内容全为零的文件seq 1000000 |xargs -i dd if=/dev/urandom of={}.data bs=1024 count=1 &> /dev/null
#生成一百万大小为1KB,内容为随机数据的文件
  • 首先通过seq 1000000生成从1到1000000的序列

  • | (管道符号): 将前面命令的输出作为后面命令的输入。

  • xargs: 是一个用于将输入行转换为命令行参数的工具。

  • -i: 选项告诉xargs将输入行中的占位符(默认是{} )替换为输入行的内容。

  • dd是一个强大的复制和转换数据的命令。

  • if=/dev/null:指定/dev/zero作为输入文件,这是一个无限量供应字节流的特殊文件,所有读取操作都会返回零值字节

  • if=/dev/urandom: 指定了输入文件为/dev/urandom,这是一个生成随机数的设备文件,可以提供随机数据。

  • of={}.data: 指定了输出文件的格式,其中{}会被seq生成的数字依次替换,形成如1.data2.data这样的文件名

  • bs=1024: 设置每次读写的块大小为1024字节。

  • count=1: 指定只读写一次块,因此每个文件的大小是1KB。

  • >> /dev/null 2>&1: 这部分重定向了命令的所有输出(标准输出和错误输出)到/dev/null。这意味着不论是正常输出还是错误信息都不会显示在终端上。

2、多核CPU情况

seq 1000000 |xargs -i -P 0 dd if=/dev/zero of={}.data bs=1024 count=1 &> /dev/null
#生成一百万个大小为1KB、内容全为零的文件seq 1000000 |xargs -i -P 0 dd if=/dev/urandom of={}.data bs=1024 count=1 &> /dev/null
#生成一百万大小为1KB,内容为随机数据的文件

-P 0选项指定了尽可能多地开启并发进程数量

如果要保证最高效率,应当设置并发进程数量等于cpu的核心数量

3、执行效率对比

3.1、单核的顺序执行
time seq 1000 |xargs -i dd if=/dev/urandom of={}.data bs=1024 count=1 &> /dev/null

image-20240527163032408

3.2、多核的并发执行
time seq 1000 |xargs -i -P 4 dd if=/dev/urandom of={}.data bs=1024 count=1 &> /dev/null

image-20240527163335036

二、如何列出/浏览这些文件

1、查看目录下文件的数量

ls | wc -l

image-20240527163628645

2、列出?

一般情况下我们会直接使用ls进行列出处理

ls
image-20240527164226494
image-20240527164419393

但是不难看出键入ls命令后终端会卡住

最后所有的文件名会一次性打印在终端的屏幕上

3、ls -f(关闭排序功能)

默认ls命令会在内存中对输出的文件进行排序

[root@localhost test]# man ls | grep -w "\-f"-f     do not sort, enable -aU, disable -ls --color
3.1、执行效率对比
[root@localhost test]# time ls &> /dev/nullreal    0m1.394s
user    0m0.906s
sys     0m0.488s
[root@localhost test]# time ls -f &> /dev/nullreal    0m0.233s
user    0m0.136s
sys     0m0.097s

image-20240527165030866

4、通过重定向导入到文件中浏览对应的文件名

ls -1 -f > /tmp/filelist.txt

-1:一行一个文件名

-f:关闭排序功能

image-20240527165511409

通过less、more、vim等工具进行浏览和搜索

三、如何快速删除目录下所有文件

1、rm -f ./* ?

rm -rf ./*

image-20240527170109543

很显然,rm的参数列表过长,无法执行rm命令

2、将整个目录名作为参数传递给rm命令

rm -rf test

image-20240527170416560

3、使用find配合-delete参数

find /test/ -mindepth 1 -delete

image-20240527171453853

这条命令会从指定目录开始,查找所有非目录项(即文件)并删除它们。

-mindepth 1 确保不删除当前目录本身,以防万一你需要保留该目录结构以便后续检查或操作。

四、需要保留指定文件怎么办

1、创建一个文件列出需要保留的文件名(一行一个文件名)

[root@localhost ~]# cd /tmp/
[root@localhost tmp]# cat > reserved_list.txt <<EOF
> 6.data
> 66.data
> 666.data
> 6666.data
> 66666.data
> EOF#在一个干净的目录下创建

2、创建一个名为empty的空目录

[root@localhost tmp]# mkdir empty

3、使用rsync命令

[root@localhost ~]# rsync -av --delete /tmp/empty/ /test/ --exclude-from=/tmp/reserved_list.txt

image-20240527180039396

3.1、命令详解

image-20240527183757314

  • rsync: 是一个用于文件传输和数据备份的高效工具,它可以镜像本地或远程系统上的文件和目录,并且可以高效地更新差异部分。
  • -av: 这里有两个选项:
    • -a--archive 是一个综合选项,意味着进行归档模式的拷贝,它保留了 symbolic links, devices, permissions, owner, groups, timestamps, 和其它文件属性,并递归地拷贝目录。
    • -v--verbose 表示详细模式,会让 rsync 在执行时输出更多的信息,比如哪些文件正在被传输。
  • --delete: 这个选项指示 rsync 它会让目标目录(/test/)与源目录(/tmp/empty/)保持一致,移除目标目录中多余的文件。
  • /tmp/empty/: 源目录,这是一个假设为空的目录。因为源目录是空的,结合 --delete 选项,实际上会导致目标目录 /test/ 中的所有内容被删除(除非有排除规则)。
  • /test/: 目标目录,你想同步到或依据源目录进行清理的目录。
  • --exclude-from=/tmp/reserved_list.txt: 这个选项指定了一个文件列表,其中包含了不想被删除或同步的文件/目录的模式。rsync 会读取 /tmp/reserved_list.txt 文件中的每一行作为排除模式,确保这些模式匹配到的文件或目录不会被删除。

整个命令的意思是:以归档模式并且详细输出的形式,同步空目录 /tmp/empty/ 到目录 /test/,在同步过程中删除目标目录中源目录不存在的文件,但排除 /tmp/reserved_list.txt 文件中列出的文件或目录不被删除。这是一种清理或重置目录结构的方法,同时保留特定的“保留”文件或目录不被删除。

4、检查源目录是否保留了指定文件

ls /test/

image-20240527180105082

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/333154.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HiWoo Box边缘计算网关

​在数字化浪潮汹涌的今天&#xff0c;边缘计算网关成为了连接物理世界与数字世界的桥梁&#xff0c;其重要性日益凸显。HiWoo Box&#xff0c;作为一款功能强大的边缘计算网关&#xff0c;不仅具备了传统网关的基本功能&#xff0c;更在数据采集、处理、传输等方面展现出了卓越…

“二叉堆:不是,啊?”

目录 前言一、堆的概念及结构堆的性质&#xff1a;堆的结构:最大堆最小堆堆顶注意 二、堆的实现1.初始化堆2. 堆的插入什么是堆的向上调整算法&#xff1f; 3.堆的删除什么是堆的向下调整算法&#xff1f; 4.获取堆顶的数据5.获取堆的数据个数6.堆的判空7.堆的销毁 三、建堆的时…

一文了解安卓内存抖动

目录 目录一、什么是内存抖动&#xff1f;1.1 Android里的内存抖动1.2 如何直观查看这种现象1.3 内存抖动带来的风险 二、如何避免内存抖动 目录 一、什么是内存抖动&#xff1f; 在程序里&#xff0c;每创建一个对象&#xff0c;就会有一块内存分配给它&#xff0c;每分配一…

超详细的前后端实战项目(Spring系列加上vue3)前后端篇(四)(一步步实现+源码)

兄弟们&#xff0c;继昨天的代码之后&#xff0c;继续完成最后的用户模块开发&#xff0c; 昨天已经完成了关于用户的信息编辑页面这些&#xff0c;今天再完善一下&#xff0c; 从后端这边开始吧&#xff0c;做一个拦截器&#xff0c;对用户做身份校验&#xff0c; 拦截器 这…

燃数科技前端25-40K*14薪一面超简单,下周二面啦

​​​​​​​ 文章末尾扫描二维码领取地址 一面 1、自我介绍 2、低代码如何设计的 3、react路由原理 4、react生命周期 5、什么是回调地狱&#xff0c;如何解决 6、jwt和session有什么区别 7、js文件相互引用有什么问题&#xff1f;如何解决 8、一个很大的json文件…

安卓手机APP开发__平台的架构

安卓手机APP开发__平台的架构 目录 概述 安卓软件栈 Linux内核 硬件抽象层(HAL) 安卓运行时 原生的C/C代码库 Java API框架 系统APP 概述 安卓是一个开源的&#xff0c;基于Linux的软件栈&#xff0c;它创建一个设备和形式因素的很宽的矩阵。 下图展示了安卓平台的所有…

全方位质量保障!龙蜥在内核、软件包、容器镜像、三方模块的 CI 工程实践

编者按&#xff1a;在海量的代码测试和构建中&#xff0c; CI(Continuous Integration)在代码提交阶段&#xff0c;对提高软件质量和开发效率起到了至关重要的作用。2023 龙蜥操作系统大会全面繁荣开发者生态分论坛上&#xff0c;龙蜥社区 QA SIG Maintainer、联通数科 CUlinux…

YOLOv8 Closing dataloader mosaic

在使用YOLOV8训练时&#xff0c;epoch训练到最后10次出现”Closing dataloader mosaic"&#xff0c;又不是报错&#xff0c;但又不往下进行训练&#xff0c;有点懵了&#xff0c;后面经过了解&#xff0c;Yolov8是默认设置close_mosaic10&#xff0c;需要把它修改为0; clo…

什么是HTTP代理?适用于哪些场景?

HTTP代理是一种网络代理服务器&#xff0c;它主要用于处理HTTP协议的请求和响应。HTTP代理充当客户端&#xff08;如浏览器&#xff09;和目标服务器之间的中介&#xff0c;允许客户端通过代理服务器来发送HTTP请求&#xff0c;并接收来自服务器的响应。HTTP代理可以分为正向代…

C++ 虚函数和纯虚函数

虚函数 #include <iostream> using namespace std; class Vehicle //交通工具 { public:void run() const{cout << "run a vehicle. " << endl;} }; class Car : public Vehicle //汽车 { public:void run() const{cout << "run a c…

报名倒计时!「飞天技术沙龙-CentOS 迁移替换专场」参会指南

为帮助广大用户诊断 CentOS 迁移替换过程中的疑难杂症&#xff0c;「飞天技术沙龙-CentOS 迁移替换专场」将于 5 月 29 日&#xff08;周三&#xff09;在北京举办&#xff0c;将围绕如何在确保服务的连续性和稳定性的前提下实现平滑迁移及如何最大限度地利用现有资源前提下确保…

R可视化:另类的箱线图

介绍 方格状态的箱线图 加载R包 knitr::opts_chunk$set(echo TRUE, message FALSE, warning FALSE) library(patternplot) library(png) library(ggplot2) library(gridExtra)rm(list ls()) options(stringsAsFactors F)导入数据 data <- read.csv(system.file(&qu…

营销短信XML接口对接发送示例

在现代社会中&#xff0c;通信技术日新月异&#xff0c;其中&#xff0c;短信作为一种快速、简便的通信方式&#xff0c;仍然在日常生活中占据着重要的地位。为了满足各种应用场景的需求&#xff0c;短信接口应运而生&#xff0c;成为了实现高能有效通信的关键。 短信接口是一种…

使用RAG和文本转语音功能,我构建了一个 QA 问答机器人

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…

Spring 事务源码分析

前言&#xff1a; 我们知道 Spring 声明式事务是通过 AOP 来实现的&#xff0c;日常项目开发中我们只需要使用 Transactional 注解就可以实现声明式事务&#xff0c;那你知道通过 Transactional 注解怎样实现事务的吗&#xff1f;本篇我们将从源码来分析 Spring 声明式事务的执…

【测评】OrangePi AIPro环境配置与基础应用

1.介绍 官网&#xff1a;http://www.orangepi.cn/ 社区&#xff1a;http://forum.orangepi.cn/ 昇腾社区&#xff1a;https://www.hiascend.com/ OrangePi AIPro 是一款基于昇腾AI技术的开发板&#xff0c;它采用华为昇腾910E AI芯片&#xff0c;集成4核64位CPU和AI处理器&am…

【Unity之FGUI】黑神章Fairy GUI控件详解

&#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1a;就业…

宝塔下新增站点 No Input File Specified.错误修复

今天明月收到了一个购买【站长必备在线工具源码含上百款工具-博客优化修复版】用户的求助&#xff0c;在宝塔里新增网站部署好工具源码后&#xff0c;访问出现“No input file specified.”的提示。其实出现这个提示一般都是 PHP 文件无法被解析造成的。 简单排查了一下宝塔相关…

python技巧梳理

背景 在开发中&#xff0c;经常会遇到&#xff0c;同时存在多个值&#xff0c;依次判断上述值&#xff0c;选择第一个非空、True的值作为整个表达式的值进行返回&#xff0c;这个时候会用到or这个关键词&#xff0c;下面讲一下用法。 方法 value1 None value2 0 value3 H…