Linux如何在目錄下靈活創建、瀏覽、刪除百萬個文件

来源:https://www.cnblogs.com/misakivv/p/18216291
-Advertisement-
Play Games

目錄一、創建百萬級小文件1、單核CPU情況2、多核CPU情況3、執行效率對比3.1、單核的順序執行3.2、多核的併發執行二、如何列出/瀏覽這些文件1、查看目錄下文件的數量2、列出?3、ls -f(關閉排序功能)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


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 作為後端工程師,多數情況都是給別人提供介面,寫的好不好使你得重視起來。 最近我手頭一些活,需要和外部公司對接,我們需要提供一個介面文檔,這樣可以節省雙方時間、也可以防止後續扯皮。這是就要考驗我的介面是否規範化。 1. 介面名稱清晰、明確 顧名思義,介面是做什麼的,是否準確、清晰?讓使用這一眼就能知道 ...
  • SpringBoot筆記 SpringBoot文檔 官網: https://spring.io/projects/spring-boot 學習文檔: https://docs.spring.io/spring-boot/docs/current/reference/html/ 線上API: http ...
  • 一、背景說明 1.1 效果演示 用python開發的爬蟲採集軟體,可自動抓取抖音評論數據,並且含二級評論! 為什麼有了源碼還開發界面軟體呢?方便不懂編程代碼的小白用戶使用,無需安裝python、無需懂代碼,雙擊打開即用! 軟體界面截圖: 爬取結果截圖: 以上。 1.2 演示視頻 軟體運行演示視頻:見 ...
  • @DateTimeFormat 和 @JsonFormat 是 Spring 和 Jackson 中用於處理日期時間格式的註解,它們有不同的作用: @DateTimeFormat @DateTimeFormat 是 Spring 框架提供的註解,用於指定字元串如何轉換為日期時間類型,以及如何格式化日 ...
  • OpenAPI 規範是用於描述 HTTP API 的標準。該標準允許開發人員定義 API 的形狀,這些 API 可以插入到客戶端生成器、伺服器生成器、測試工具、文檔等中。儘管該標準具有普遍性和普遍性,但 ASP.NET Core 在框架內預設不提供對 OpenAPI 的支持。 當前 ASP.NET ...
  • 不廢話,直接代碼 private Stack<Action> actionStack = new Stack<Action>(); private void SetCellValues() { var worksheet = Globals.ThisAddIn.Application.ActiveS ...
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是不同J-Link版本對於i.MXRT1170連接複位後處理行為。 痞子衡之前寫過一篇舊文 《i.MXRT1170上用J-Link連接複位後PC總是停在0x223104的原因》,這篇文章詳細解釋了 RT1170 BootROM 代碼里軟體 ...
  • 目錄題目思路代碼展示進程A進程B結果展示 題目 要求進程A創建一條消息隊列之後向進程B發送SIGUSR1信號,進程B收到該信號之後打開消息隊列並寫入一段信息作為消息寫入到消息隊列中,要求進程B在寫入消息之後,發SIGUSR2信號給進程A,進程A收到該信號則從消息隊列中讀取消息並輸出消息正文的內容。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...