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.mzph.cn/diannao/17032.shtml

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

相关文章

SQL预处理语句

概念 预处理语句是一种特殊的数据库操作方式&#xff0c;先定义一个SQL语句模板&#xff0c;然后再填充具体的数据。 作用 防止SQL注入 参数化查询&#xff1a;在预处理语句中&#xff0c;数据是通过参数传递的&#xff0c;而不是直接拼接到SQL语句中。这意味着即使参数中包…

Javaweb数据库通用查询BaseDao

连接数据库工具类&#xff1a;DBUtil.java package util;import java.io.IOException; import java.io.InputStream; import java.sql.*; import java.util.Properties;/** param null:* jdbc连接工具类* return null* author liu* description TODO* date 2024/5/25 17:05*/ …

flinkcdc 3.0 源码学习之客户端flink-cdc-cli模块

注意 : 本文章是基于flinkcdc 3.0 版本写的 我们在前面的文章已经提到过,flinkcdc3.0版本分为4层,API接口层,Connect链接层,Composer同步任务构建层,Runtime运行时层,这篇文章会对API接口层进行一个探索.探索一下flink-cdc-cli模块,看看是如何将一个yaml配置文件转换成一个任务…

电子画册制作技巧,从零基础到专业人士

电子画册作为一种新兴的视觉传达形式&#xff0c;正越来越受到大众的喜爱。从设计新手到专业人士&#xff0c;如何快速掌握电子画册的制作技巧&#xff0c;提升自己的创作水平呢&#xff1f; 一、明确设计目的和定位 制作电子画册前&#xff0c;首先要明确其设计目的和定位。画…

数字营销:以大数据作引擎,推动企业全面数字化升级

数字营销本质乃是以大数据为核之心&#xff0c;促使营销活动高效运作&#xff0c;消费者线上线下数据的无缝衔接、企业内外部数据的贯通、公域引流私域运营等&#xff0c;皆已成为企业运营的标准配置。 数据即等同于市场&#xff0c;市场即等同于用户&#xff0c;用户乃是企…

回溯算法之简单组合

哦吼&#xff01;今天结束了二叉树&#xff0c;开始回溯算法 其实也需要用到迭代&#xff0c;哈哈哈哈&#xff0c;但是这个暴力穷举真的好爽。 先记一下回溯算法的基本框架吧 老规矩&#xff1a; 还是有结束条件 但是后面就不太一样了 这里就是for循环&#xff0c;循环n…

理解 gRPC 和 tRPC 的区别:简单入门

gRPC 和 tRPC 的区别 在现代分布式系统和微服务架构中&#xff0c;服务间的通信至关重要。API 技术栈的选择直接影响到系统的性能、可维护性和开发效率。gRPC 和 tRPC 是两种备受关注的 RPC&#xff08;远程过程调用&#xff09;框架&#xff0c;各有其独特的特性和适用场景。…

springMVC,springboot整合jasypt

生成加密串 public class Encryptor { public static void main(String[] args) { BasicTextEncryptor textEncryptor new BasicTextEncryptor(); textEncryptor.setPassword("mysalt");//自定义加密盐 String myEncryptedPassword t…

Windows下mingw32编译ffmpeg5.1.4实现rtsp拉流

由于客户要求&#xff0c;要在Windows下使用mingw32编译&#xff0c;去ffmpeg.org下载需要编译的版本&#xff0c;使用msys2方法进行编译&#xff0c;使用QT5.10的编译器&#xff0c;基本上把网上的方法试了个遍&#xff0c;编译全部库总是报错出问题 查看了ffbuild文件夹中con…

爬虫之re数据清洗

文章目录 一、正则【Regular】二、重要语法1、获取内容: 左边(.*?)右边2、替换数据: re.sub(源数据|源数据, 目标数据, 字符串) 一、正则【Regular】 概念: 根据程序员的指示, 从<字符串>中提取数据 结果: 列表 使用频率: 正则跟xpath相比, 正则是弟弟 二、重要语法 …

SvelteKit:构建高性能SSR应用的新框架

SvelteKit 是基于 Svelte 的下一代框架&#xff0c;用于构建服务器端渲染&#xff08;SSR&#xff09;和静态站点生成&#xff08;SSG&#xff09;的应用。Svelte 是一个轻量级的前端框架&#xff0c;以其极高的性能和简洁的代码著称。SvelteKit 扩展了 Svelte 的能力&#xff…

【Maven】Maven主要知识点目录整理

1. Maven的基本概念 作者相关文章链接&#xff1a; 1、【Maven】简介_下载安装-CSDN博客 定义&#xff1a;Maven是Apache的一个开源项目&#xff0c;是Java开发环境中用于管理和构建项目&#xff0c;以及维护依赖关系的强大软件项目管理工具。作用&#xff1a;简化了项目依赖…

文件夹类型异常成文件:原因解析与恢复策略

在数字时代&#xff0c;数据的安全与完整性对于个人和企业都至关重要。然而&#xff0c;有时我们可能会遇到一种令人困惑的情况&#xff1a;原本应该是文件夹的图标&#xff0c;却突然变成了文件的图标&#xff0c;这就是所谓的“文件夹类型成文件”问题。本文将深入探讨这一现…

Swagger测试接口,请求头添加token

概述Swagger 1、概述 在日常开发中&#xff0c;我们的业务需要用户登录&#xff0c;权限控制。但是在某些情况下我们使用Swagger测试接口&#xff0c;部分接口需要携带token&#xff0c;才能访问&#xff0c;就需要在swagger添加token窗口。 效果图&#xff1a; 由 右上角 A…

如何判断一个对象是否已经被回收?

在Java中&#xff0c;无法直接判断一个对象是否已经被垃圾回收&#xff08;GC&#xff09;。Java的设计理念是让垃圾回收机制完全由JVM管理&#xff0c;程序员不应该也不能直接干预或查询垃圾回收的状态。然而&#xff0c;有一种间接的方法可以帮助我们了解对象是否已被回收&am…

数据库查询以及修改方法 aspx ashx

main.aspx页面 <% Page Language"C#" AutoEventWireup"true" %> <% Import Namespace"MysqlHelpers" %> <!DOCTYPE html> <script runat"server"> public string RecId, userid, LOGIN, Token, ORG_…

Python计算回归拟合各项指标

0、各项回归指标简介 Relative Root Mean Squared Error&#xff08;RRMSE&#xff09;&#xff1a;The RRMSE normalizes the Root Mean Squared Error (RMSE) by the mean of observations. It goes from 0 to infinity. The lower the better the prediction performance.T…

一千题,No.0031(A除以B)

本题要求计算 A/B&#xff0c;其中 A 是不超过 1000 位的正整数&#xff0c;B 是 1 位正整数。你需要输出商数 Q 和余数 R&#xff0c;使得 ABQR 成立。 输入格式&#xff1a; 输入在一行中依次给出 A 和 B&#xff0c;中间以 1 空格分隔。 输出格式&#xff1a; 在一行中依…

衍生品赛道的 UniSwap:SynFutures 或将成为行业领军者

经过一个周期的发展&#xff0c;DeFi 已经成为基于区块链构建的最成功的去中心化应用&#xff0c;并彻底改变了加密市场的格局。加密货币交易开始逐步从链下转移到链上&#xff0c;并从最初简单的 Swap 到涵盖借贷、Staking、衍生品交易等广泛的生态系统。 在 DeFi 领域&#x…