Linux下一次刪除百萬文件

来源:http://www.cnblogs.com/blking/archive/2017/12/20/8073167.html
-Advertisement-
Play Games

Linux下一次刪除百萬文件 Linux下一次刪除百萬文件 線上環境遇到的一個問題,文件數量過多,執行rm命令報錯 # rm -f ./* -bash: /bin/rm: Argument list too long # rm -f ./* -bash: /bin/rm: Argument list ...


Linux下一次刪除百萬文件

線上環境遇到的一個問題,文件數量過多,執行rm命令報錯

# rm -f ./*

-bash: /bin/rm: Argument list too long

根據報錯檢查狀態

# ls | wc -l

634084

# du -sh

64G

線上下環境進行故障復現

測試環境準備

# df -Th

Filesystem     Type   Size  Used Avail Use% Mounted on

/dev/sda3      ext4   1.8T  331G  1.4T  20% /

tmpfs          tmpfs  7.7G     0  7.7G   0% /dev/shm

/dev/sda1      ext4   190M   61M  120M  34% /boot

# grep name /proc/cpuinfo

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

model name      : Intel(R) Xeon(R) CPU E5-2609 v3 @ 1.90GHz

# free -m

             total       used       free     shared    buffers     cached

Mem:         15709       1643      14066          8        452        559

-/+ buffers/cache:        631      15078

Swap:         8191          0       8191

# cat /etc/redhat-release

CentOS release 6.8 (Final)

# uname -r

2.6.32-642.1.1.el6.x86_64

測試生成測試數據

# for i in `seq 1000000`;do echo "${i}" >> ${i}.txt;done

# ls | wc -l

1000000

# du -sh

3.9G .

# ls *.txt

-bash: /bin/ls: Argument list too long

# rm -f ./*

-bash: /bin/rm: Argument list too long

 

 

方法1:使用for迴圈方式執行刪除任務

# time for i in `ls ./`;do rm -f ${i};done

 

real   58m44.234s

user  8m59.930s

sys    37m16.453s

時間太長了,絕壁不能忍

 

 

方法2:直接刪目錄

# time rm -rf test && mkdir test

 

real   0m56.768s

user  0m1.453s

sys    0m22.603s

# du -sh test

4.0K  test

速度不錯,然而很多情況下不能直接刪目錄,有點蛋疼

 

 

方法3:使用 find + xargs 組合命令執行刪除任務(網上流傳最多的方法)

# time find ./ -type f | xargs -n 1 rm -f

 

real   18m30.267s

user  0m9.536s

sys    1m38.999s

 

# time find ./ -type f | xargs rm -f

 

real   16m16.774s

user  0m2.232s

sys    0m30.454s

一樣蛋疼,如果需求是刪除全部文件的話,用這種方法就太low了,適合刪除部分數據的場景

 

 

方法4:使用 ls + xargs 組合命令執行刪除任務

# time ls | xargs -L 100 rm -f

 

real   1m3.801s

user  0m7.054s

sys    0m28.582s

 

# time ls | xargs -L 1000 rm -f

 

real   0m55.917s

user  0m5.322s

sys    0m24.778s

 

# time ls | xargs -L 2000 rm -f

 

real   0m55.560s

user  0m5.209s

sys    0m24.702s

 

# time ls | xargs -L 5000 rm -f

 

real   0m55.057s

user  0m5.196s

sys    0m24.666s

 

# time ls | xargs -L 10000 rm -f

 

real   0m55.733s

user  0m5.121s

sys    0m24.657s

 

# time ls | xargs -L 100000 rm -f

xargs: argument list too long

 

real   0m4.018s

user  0m3.324s

sys    0m0.701s

速度杠杠滴~~但是註意文件名長度,選擇合適的傳參數量

 

 

方法5:使用rsync命令來執行刪除任務

# mkdir /tmp/Null

# time rsync --delete-before -d /tmp/Null/ ./

 

real   0m56.386s

user  0m1.767s

sys    0m28.075s

# ll

total 0

# du -sh ./

29M ./

 沒什麼優點,缺點是rsync命令比較冷門,參數不容易記住,用的機會也不多,作為拓展方法瞭解一下就好

 

如果你有其他好的方法,可以一起探討一下~~

 

 

原創文章,侵權必究

 


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

-Advertisement-
Play Games
更多相關文章
  • 1首先來講講應用程式如何實現系統調用(用戶態->內核態)? 我們以應用程式的write()函數為例: 1)首先用戶態的write()函數會進入glibc庫,裡面會將write()轉換為swi(Software Interrupt)指令,從而產生軟體中斷,swi指令如下所示: 2)然後CPU會跳到異常 ...
  • 現在的公司一般都會有很多內部管理系統,比如OA、ERP、CRM、郵件系統等。員工入職之後如果每個系統都創建一個賬號和密碼,首先員工記系統賬號就是一件非常頭疼的事情,如果公司有一百個系統那就得創建一百個賬號(所在的公司就有估計200個系統、8萬員工)。就算我們用日記本把賬號統一記錄起來,可以解決賬號登 ...
  • 最近有個小項目需要安裝10台顯卡為Quadro K620的機子,期間查看了許多教程都不太完整,所以整理了一下,把自己成功的經驗分享給大家,給自己寫博客開個小頭,有問題可以留言。 系統版本:CentOS7 CUDA版本:CUDA-9.1 安裝方式:離線U盤拷貝,控制台界面,cuda.run包安裝(不需 ...
  • 1.chgrp——改變所屬群組 每個檔案都有三個屬性,擁有者、群組、其他人,chgrp就可以更改檔案的群組,如下 上面1.txt和2.txt的群組都是zyj,相當於在zyj群組中的用戶都只能讀取檔案1.txt和2.txt 接下來我們改變檔案的群組為root後就可以修改檔案的內容了,如下 2.chow ...
  • 推輓輸出,可以輸出高電平,連接數字器件: 輸出0時,N-MOS導通,P-MOS高阻,輸出0。 輸出1時,N-MOS高阻,P-MOS高阻,輸出1;(不需要外部上拉電阻) 開漏輸出: 輸出端相當於三極體的集電極,要得到高電平狀態需要上拉電阻才行,適合做電流型驅動; 輸出0時,N-MOS導通,P-MOS不 ...
  • 1.什麼操作出現:當我在項目中添加產品或者修改時,瀏覽器出現HTTP Status 500 Request processing failed; nested exception is org.hibernate.exception.GenericJDBCException: could not e ...
  • #!/usr/bin/expect -f set pwffd [lindex $argv 0] spawn ssh cmesvr2i expect "*password:" send "$pwffd\r" expect "*#" interact ...
  • 二周第三次課(12月20日)2.14 更改文件和目錄許可權chmod 2.15 更改所有者和所屬組chown2.16 umask2.17 隱藏許可權lsattr/chattr 更改文件和目錄許可權:命令:#chmod >> change mode (-R=文件所有者·文件所屬組·其他用戶一起更改) # r ...
一周排行
    -Advertisement-
    Play Games
  • 前言 本文介紹一款使用 C# 與 WPF 開發的音頻播放器,其界面簡潔大方,操作體驗流暢。該播放器支持多種音頻格式(如 MP4、WMA、OGG、FLAC 等),並具備標記、實時歌詞顯示等功能。 另外,還支持換膚及多語言(中英文)切換。核心音頻處理採用 FFmpeg 組件,獲得了廣泛認可,目前 Git ...
  • OAuth2.0授權驗證-gitee授權碼模式 本文主要介紹如何筆者自己是如何使用gitee提供的OAuth2.0協議完成授權驗證並登錄到自己的系統,完整模式如圖 1、創建應用 打開gitee個人中心->第三方應用->創建應用 創建應用後在我的應用界面,查看已創建應用的Client ID和Clien ...
  • 解決了這個問題:《winForm下,fastReport.net 從.net framework 升級到.net5遇到的錯誤“Operation is not supported on this platform.”》 本文內容轉載自:https://www.fcnsoft.com/Home/Sho ...
  • 國內文章 WPF 從裸 Win 32 的 WM_Pointer 消息獲取觸摸點繪製筆跡 https://www.cnblogs.com/lindexi/p/18390983 本文將告訴大家如何在 WPF 裡面,接收裸 Win 32 的 WM_Pointer 消息,從消息裡面獲取觸摸點信息,使用觸摸點 ...
  • 前言 給大家推薦一個專為新零售快消行業打造了一套高效的進銷存管理系統。 系統不僅具備強大的庫存管理功能,還集成了高性能的輕量級 POS 解決方案,確保頁面載入速度極快,提供良好的用戶體驗。 項目介紹 Dorisoy.POS 是一款基於 .NET 7 和 Angular 4 開發的新零售快消進銷存管理 ...
  • ABP CLI常用的代碼分享 一、確保環境配置正確 安裝.NET CLI: ABP CLI是基於.NET Core或.NET 5/6/7等更高版本構建的,因此首先需要在你的開發環境中安裝.NET CLI。這可以通過訪問Microsoft官網下載並安裝相應版本的.NET SDK來實現。 安裝ABP ...
  • 問題 問題是這樣的:第三方的webapi,需要先調用登陸介面獲取Cookie,訪問其它介面時攜帶Cookie信息。 但使用HttpClient類調用登陸介面,返回的Headers中沒有找到Cookie信息。 分析 首先,使用Postman測試該登陸介面,正常返回Cookie信息,說明是HttpCli ...
  • 國內文章 關於.NET在中國為什麼工資低的分析 https://www.cnblogs.com/thinkingmore/p/18406244 .NET在中國開發者的薪資偏低,主要因市場需求、技術棧選擇和企業文化等因素所致。歷史上,.NET曾因微軟的閉源策略發展受限,儘管後來推出了跨平臺的.NET ...
  • 在WPF開發應用中,動畫不僅可以引起用戶的註意與興趣,而且還使軟體更加便於使用。前面幾篇文章講解了畫筆(Brush),形狀(Shape),幾何圖形(Geometry),變換(Transform)等相關內容,今天繼續講解動畫相關內容和知識點,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 什麼是委托? 委托可以說是把一個方法代入另一個方法執行,相當於指向函數的指針;事件就相當於保存委托的數組; 1.實例化委托的方式: 方式1:通過new創建實例: public delegate void ShowDelegate(); 或者 public delegate string ShowDe ...