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

2024-05-27 20:12

本文主要是介绍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

这篇关于Linux如何在目录下灵活创建、浏览、删除百万个文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1008479

相关文章

linux生产者,消费者问题

pthread_cond_wait() :用于阻塞当前线程,等待别的线程使用pthread_cond_signal()或pthread_cond_broadcast来唤醒它。 pthread_cond_wait() 必须与pthread_mutex 配套使用。pthread_cond_wait()函数一进入wait状态就会自动release mutex。当其他线程通过pthread

ESP32 esp-idf esp-adf环境安装及.a库创建与编译

简介 ESP32 功能丰富的 Wi-Fi & 蓝牙 MCU, 适用于多样的物联网应用。使用freertos操作系统。 ESP-IDF 官方物联网开发框架。 ESP-ADF 官方音频开发框架。 文档参照 https://espressif-docs.readthedocs-hosted.com/projects/esp-adf/zh-cn/latest/get-started/index

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

RedHat运维-Linux文本操作基础-AWK进阶

你不用整理,跟着敲一遍,有个印象,然后把它保存到本地,以后要用再去看,如果有了新东西,你自个再添加。这是我参考牛客上的shell编程专项题,只不过换成了问答的方式而已。不用背,就算是我自己亲自敲,我现在好多也记不住。 1. 输出nowcoder.txt文件第5行的内容 2. 输出nowcoder.txt文件第6行的内容 3. 输出nowcoder.txt文件第7行的内容 4. 输出nowcode

【Linux进阶】UNIX体系结构分解——操作系统,内核,shell

1.什么是操作系统? 从严格意义上说,可将操作系统定义为一种软件,它控制计算机硬件资源,提供程序运行环境。我们通常将这种软件称为内核(kerel),因为它相对较小,而且位于环境的核心。  从广义上说,操作系统包括了内核和一些其他软件,这些软件使得计算机能够发挥作用,并使计算机具有自己的特生。这里所说的其他软件包括系统实用程序(system utility)、应用程序、shell以及公用函数库等

一份LLM资源清单围观技术大佬的日常;手把手教你在美国搭建「百万卡」AI数据中心;为啥大模型做不好简单的数学计算? | ShowMeAI日报

👀日报&周刊合集 | 🎡ShowMeAI官网 | 🧡 点赞关注评论拜托啦! 1. 为啥大模型做不好简单的数学计算?从大模型高考数学成绩不及格说起 司南评测体系 OpenCompass 选取 7 个大模型 (6 个开源模型+ GPT-4o),组织参与了 2024 年高考「新课标I卷」的语文、数学、英语考试,然后由经验丰富的判卷老师评判得分。 结果如上图所

电脑不小心删除的文件怎么恢复?4个必备恢复方法!

“刚刚在对电脑里的某些垃圾文件进行清理时,我一不小心误删了比较重要的数据。这些误删的数据还有机会恢复吗?希望大家帮帮我,非常感谢!” 在这个数字化飞速发展的时代,电脑早已成为我们日常生活和工作中不可或缺的一部分。然而,就像生活中的小插曲一样,有时我们可能会在不经意间犯下一些小错误,比如不小心删除了重要的文件。 当那份文件消失在眼前,仿佛被时间吞噬,我们不禁会心生焦虑。但别担心,就像每个问题

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

Linux系统稳定性的奥秘:探究其背后的机制与哲学

在计算机操作系统的世界里,Linux以其卓越的稳定性和可靠性著称,成为服务器、嵌入式系统乃至个人电脑用户的首选。那么,是什么造就了Linux如此之高的稳定性呢?本文将深入解析Linux系统稳定性的几个关键因素,揭示其背后的技术哲学与实践。 1. 开源协作的力量Linux是一个开源项目,意味着任何人都可以查看、修改和贡献其源代码。这种开放性吸引了全球成千上万的开发者参与到内核的维护与优化中,形成了