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/null

real    0m1.394s
user    0m0.906s
sys     0m0.488s
[root@localhost test]# time ls -f &> /dev/null

real    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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

探索Python函数参数的奥秘

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、揭开函数参数的神秘面纱 1. 位置参数&#xff1a;按序传值的基石 2. 关键字参数&#…

作业-day-240527

Cday1思维导图 定义自己的命名空间my_sapce&#xff0c;在my_sapce中定义string类型的变量s1&#xff0c;再定义一个函数完成对字符串的逆置 #include <iostream>using namespace std;namespace my_space {string s1"abc123";string recover(string s){int i0…

C语言基础——数组

{\▁/} ( / 。\ ) / ⊃&#x1f494;\⊃ 为什么我那么努力还是得不到那么多赞 ʕ • ᴥ • ʔ づ♡ど &#x1f389; 欢迎点赞支持&#x1f389; 个人主页&#xff1a;励志不掉头发的内向程序员&#xff1b; 专栏主页&#xff1a;C语言基础&#xff1b; 文章目录 前言…

Spring AOP失效的场景事务失效的场景

场景一&#xff1a;使用this调用被增强的方法 下面是一个类里面的一个增强方法 Service public class MyService implements CommandLineRunner {private MyService myService;public void performTask(int x) {System.out.println("Executing performTask method&quo…

【软件测试】bug篇|软件测试的生命周期|描述bug的要素|bug的级别|bug的生命周期|高频面试题:与开发产⽣争执怎么处理

目录 一、软件测试的⽣命周期 二、BUG 2.1 bug的概念 2.2 描述bug的要素 2.3 bug级别 2.4 bug的⽣命周期 &#x1f4a1;2.5 与开发产⽣争执怎么办&#xff08;⾼频考题&#xff09; &#x1f4a1; 推荐 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&…

java对象的比较

一.PriorityQueue中插入对象 优先级队列在插入元素时有个要求&#xff1a;插入的元素不能是null或者元素之间必须要能够进行比较&#xff0c;那优先级队列中能否插入自定义类型对象呢&#xff1f; 堆中插入元素时&#xff0c;必须要进行元素的比较&#xff0c;而此时Card是没有…

Java入门-java的集合框架

集合概念 集合&#xff0c;有时也称作容器(Container), 是对象的持有者&#xff0c;它们可以有助于高效访问的方式存储的组织对象。以生活中的案例为例&#xff1a; 集合就像装衣服的柜子&#xff0c;衣服就是集合中的元素。 集合框架图 Collection中每次操作的都是一个对象&a…

智慧林业云巡平台 客户端和移动端(支持语音和视频)自动定位巡护,后端离线路线监测

目前现状 无法客观、方便地掌握护林员的到位情况&#xff0c;因而无法有效地保证巡护人员按计划要求&#xff0c;按时按周期对所负责的林区开展巡护&#xff0c;使巡护工作的质量得不到保证。遇到火情、乱砍滥伐等灾情时无法及时上报处理&#xff0c;现场状况、位置等信息描述…

pycharm打开服务器(linux)上的项目

先在本地打开项目 一、项目文件配置 tools-deployment-configuration 新增一个sftp连接 测试服务器是否可以连通 mappings中设置本地路径和服务器上的路径 二、环境配置 先参考文章 复现论文的conda环境&#xff08;win和联网、离线linux&#xff09;_conda复现环境-CSDN博…

Qt pro工程文件编写汇总(区分debug和release、32位和64位的方法,编译输出目录等)

前言&#xff1a; 从事qt开发已经好几年了&#xff0c;但有关pro编写的一些细节问题一直没有一个很好的梳理汇总——因为实际工作开发中&#xff0c;往往只需要编译特定版本的软件&#xff08;例如32位release版本&#xff09;&#xff0c;项目创建好后并设置好编译路径&#x…

美团Java社招面试题真题,最新面试题

如何处理Java中的内存泄露&#xff1f; 1、识别泄露&#xff1a; 使用内存分析工具&#xff08;如Eclipse Memory Analyzer Tool、VisualVM&#xff09;来识别内存泄露的源头。 2、代码审查&#xff1a; 定期进行代码审查&#xff0c;关注静态集合类属性和监听器注册等常见内…

逻辑分析仪的调试使用

调试软件下载&#xff1a;点击跳转 一、接线 逻辑分析仪 设备 GND --- GND CHX&#xff08;数据通道&#xff09; --- 通信引脚 二、数据采集 图中两个可以选择数字大小的地方分别表示 采样深度 &#xff08;10M Samples&a…

Swift 类和结构体

类和结构体 一、结构体和类对比1、类型定义的语法2、结构体和类的实例3、属性访问4、结构体类型的成员逐一构造器 二、结构体和枚举是值类型三、类是引用类型1、恒等运算符2、指针 结构体和类作为一种通用而又灵活的结构&#xff0c;成为了人们构建代码的基础。你可以使用定义常…

【全开源】活动报名表单系统(ThinkPHP+Uniapp+uView)

轻松构建高效报名平台 一、引言 随着线上活动的日益增多&#xff0c;一个高效、易用的活动报名表单系统成为了举办各类活动的必备工具。为了满足不同组织和个人的需求&#xff0c;我们推出了功能强大的“活动报名表单系统源码”。本文将为您详细介绍该源码的特点、功能以及使…

xml篇---提取VOC格式的坐标,并按照cameraID进行排序(二)

xml篇—提取VOC格式的坐标&#xff0c;并按照cameraID进行排序&#xff08;二&#xff09; import os import xml.etree.ElementTree as ETdef parse_xml(xml_file):tree ET.parse(xml_file)root tree.getroot()objects {}for obj in root.findall(object):name obj.find(…

使用ResNet-50训练自己的数据集(花的种类)

1.数据集处理 具体操作 1.把不同类别的花&#xff08;或者自己数据集的不同类别&#xff09;放在不同的文件夹下 2.文件夹名字是花朵类别 代码预处理 # 对数据集进行处理 import os from shutil import copy import randomdef mkfile(file):if not os.path.exists(file):os…

简易计算器

前言 简易计算器&#xff0c;旨在实现一个简单的计算器功能。 整形&#xff0c;浮点型数据的加减乘除运算&#xff1b;数据的统计(如文件中某字符的出现频数)&#xff1b;期望&#xff0c;方程运算&#xff1b;平均数&#xff0c;最小值&#xff0c;最大值&#xff0c;中位数…

每日5题Day11 - LeetCode 51 - 55

每一步向前都是向自己的梦想更近一步&#xff0c;坚持不懈&#xff0c;勇往直前&#xff01; 第一题&#xff1a;51. N 皇后 - 力扣&#xff08;LeetCode&#xff09; class Solution {public List<List<String>> solveNQueens(int n) {List<List<String>…

揭秘订单排队模式:社交电商新策略

随着移动互联网的蓬勃发展&#xff0c;社交电商正以其独特的魅力席卷全球。据权威机构预测&#xff0c;到2024年&#xff0c;全球社交电商市场规模有望达到惊人的2.8万亿美元。面对如此庞大的市场蛋糕&#xff0c;如何精准把握机遇&#xff0c;实现业务的跨越式增长&#xff0c…

SQL157 平均播放进度大于60%的视频类别

描述 用户-视频互动表tb_user_video_log iduidvideo_idstart_timeend_timeif_followif_likeif_retweetcomment_id110120012021-10-01 10:00:002021-10-01 10:00:30011NULL210220012021-10-01 10:00:002021-10-01 10:00:21001NULL310320012021-10-01 11:00:502021-10-01 11:01…