欧美一区2区三区4区公司二百,国产精品婷婷午夜在线观看,自拍偷拍亚洲精品,国产美女诱惑一区二区

Liunx常用刪除命令詳解

創建、刪除和修改文件是用戶在 Linux 系統中執行的非常常見操作。大家都知道,在 Linux 系統里使用?rm?命令刪除單個文件時,幾乎一瞬間就完成了。但是如果文件數量很大,那么刪除操作就需要很長時間才能完成。

你有沒想過,刪除 50 萬個小文件,需要花費多少時間?

我寫這篇文章的目的,是為了找出在 Linux 中刪除巨量文件的最快方法。通過測試發現,rm?命令簡直弱爆了!

我們將從一些簡單的文件刪除方法開始,然后比較不同方法完成文件刪除任務的速度。看看哪種方式刪除速度最快。

?

  1. 文件刪除的幾種方式

在 Linux 系統中刪除文件,最常用的命令就是?rm?命令。這個命令相信大家都已經很熟悉了,我們來簡單回顧一些?rm?命令的例子。

$ rm -f testfile

-f?選項在上面的命令中,表示將在不要求確認的情況下強行刪除文件。

$ rm -rf testdirectory

這個命令將刪除名為?testdirectory?的目錄以及該目錄中的所有內容(使用的?-r?選項是遞歸刪除文件)。

而刪除目錄,我們還有另一個命令,那就是?rmdir?,但是它只有在目錄為空時才會刪除該目錄。

$ rmdir testdirectory

現在我們看看在 Linux 中刪除文件的一些其它不同方法。

我最喜歡的方法之一是使用?find?命令,再進行刪除操作。find?命令是一個非常方便的工具,可用于根據文件的類型、大小、創建日期、修改日期和更多不同的條件來搜索文件。

我們來看一個?find?命令使用?-exec?來調用?rm?命令的例子。

$ find /test -type f -exec rm {} \;

上述命令將刪除?/test?目錄中的所有文件。首先?find?命令將查找目錄中的所有文件,然后對于每個搜索結果,它會執行?rm?命令。

我們再看看可以與?find?命令一起使用的一些不同方法來刪除文件。

$ find /test -mtime +7 -exec rm {} \;

在上述示例中,find?命令將搜索?/test?目錄中 7 天前修改過的所有文件,然后刪除每個文件。

$ find /test -size +7M -exec rm {} \;

上述示例中,將搜索目錄?/test?目錄中所有大于 7M 的文件,然后再刪除它們。

在以上我們列出來的所有?find?命令示例中,都會為找到的每個文件調用?rm?命令。例如,在上面的最后一個?find?命令中,如果結果中有 50 個大于 7M 的文件,那么將調用 50 次?rm?命令刪除文件。而這樣的操作將需要花費更長的時間。

除了在?find?中借助?-exec?參數調用?rm?命令外,還有一個更好的選擇,那就是使用?-delete?選項。比如:

$ find /test -size +7M -delete

達到的效果與上一條命令一樣。

  1. 刪除巨量文件時用什么命令最快?

話不多說,我們直接上測試。

首先借助一個簡單的 bash for 循環創建 50 萬個文件。

$ for i in $(seq 1 500000); do echo testing >> $i.txt; done

上述命令中,將在當前工作目錄中創建 50 萬個 txt 文件,名稱從 1.txt 到 500000.txt,每個文件都包含?testing?的文本內容,因此文件大小至少在幾千字節的范圍。

在創建了 50 萬個文件后,我們將嘗試使用多方式來刪除它們,看看哪種方式刪除巨量文件速度最快。

?

Round 1:rm 命令

首先讓我們使用簡單的?rm?命令,同時我們使用?time?命令來計時。

$ time rm -f *

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

real??? 0m11.126s

user??? 0m9.673s

sys???? 0m1.278s

我們可以看到?rm?命令的執行結果是?Argument list too long?,這意味著該命令沒有完成刪除,因為給?rm?命令的文件數量太大而無法完成,所以它直接就躺平罷工了。

不要注意?time?命令顯示的時間,因為?rm?命令沒有完成它的操作,time?命令只管顯示你命令執行了多長時間,而不關心命令的最終結果。

Round 2:使用 -exec 參數的 find 命令

現在讓我們使用我們之前看到的帶有 -exec 參數的?find?命令。

$ time find ./ -type f -exec rm {} \;

real??? 14m51.735s

user??? 2m24.330s

sys???? 9m48.743s

從我們使用?time?命令得到的輸出可以看出,從單個目錄中刪除 50 萬個文件需要 14 分 51 秒。 這是相當長的時間,因為對于每個文件,都會執行一個單獨的?rm?命令,直到刪除所有文件。

Round 3:使用 -delete 參數的 find 命令

現在讓我們通過在?find?命令中使用?-delete?選項來測試消耗的時間。

$ time find ./ -type f -delete

real??? 5m11.937s

user??? 0m1.259s

sys???? 0m28.441s

刪除速度大大提高,只用了 5 分 11 秒!當你在 Linux 中刪除數百萬個文件時,這是速度的驚人改進。

Round 4:Perl 語言

現在讓我們看看使用 Perl 語言刪除文件是如何工作的,以及它與我們之前看到的其他刪除方式相比的速度。

$ time perl -e 'for(<*>){((stat)[9]<(unlink))}'

real??? 1m0.488s

user??? 0m7.023s

sys???? 0m27.403s

從結果可以看出,Perl 只用了大約 1 分鐘就刪除了該目錄中的 50 萬個文件,與我們之前看到的其他?find?命令和?rm?命令相比,這個速度非常之快!

但是,如果您有興趣在使用 Perl 時用到更復雜的選項,則需要對 Perl 正則表達式有一定的了解。

?

Round 5:rsync 命令

還有一種較少使用且鮮為人知的方法可用于刪除文件夾內的大量文件,這種方法正是我們著名的工具?rsync?,它的基本用法是用于在 Linux 中的兩個本地和遠程位置之間傳輸和同步文件。

現在我們來看看如何使用?rsync?命令的來刪除文件夾內所有文件。其實很簡單,我們可以通過將具有大量文件的目標目錄與空目錄進行同步來實現刪除的操作。

在我們的例子中,?/test?目錄(目標目錄)有 50 萬個文件,我們再創建一個名為?blanktest?的空目錄(源目錄)。現在,我們將在?rsync?命令中使用?-delete?選項,這將刪除目標目錄中的所有源目錄中不存在文件。

$ time rsync -a --delete blanktest/ test/

real??? 2m52.502s

user??? 0m2.772s

sys???? 0m32.649s

可以看到,僅用 2 分鐘 52 秒就完成刪除。

因此與?find?命令相比,如果您想清空包含數百萬個文件的目錄,使用?rsync?命令會更好。

  1. 小結

下表總結了 Linux 中采用不同方式刪除 50 萬個文件的速度,方便大家參考。

命令 花費時間
rm 命令 無法刪除大量文件
使用 -exec 參數的 find 命令 14 分 51 秒
使用 -delete 參數的 find 命令 5 分 11 秒
Perl 1 分鐘
rsync 命令 2 分 52 秒

?

文章鏈接: http://www.qzkangyuan.com/2622.html

文章標題:Liunx常用刪除命令詳解

文章版權:夢飛科技所發布的內容,部分為原創文章,轉載請注明來源,網絡轉載文章如有侵權請聯系我們!

聲明:本站所有文章,如無特殊說明或標注,均為本站原創發布。任何個人或組織,在未征得本站同意時,禁止復制、盜用、采集、發布本站內容到任何網站、書籍等各類媒體平臺。如若本站內容侵犯了原著者的合法權益,可聯系我們進行處理。

給TA打賞
共{{data.count}}人
人已打賞
建站教程

Debian10 命令行啟動

2021-12-8 11:28:22

建站教程

WordPress常用函數之wpautop()

2021-12-17 13:55:27

0 條回復 A文章作者 M管理員
    暫無討論,說說你的看法吧
?
個人中心
購物車
優惠劵
今日簽到
有新私信 私信列表
搜索

夢飛科技 - 最新云主機促銷服務器租用優惠

主站蜘蛛池模板: 土默特左旗| 隆回县| 邢台县| 青岛市| 漳浦县| 县级市| 沿河| 阿拉善盟| 惠东县| 瑞丽市| 嘉鱼县| 瓮安县| 昆山市| 六枝特区| 浮梁县| 鄯善县| 南昌县| 兴海县| 阿城市| 通许县| 拜城县| 峡江县| 广宁县| 务川| 花莲县| 灵丘县| 甘孜县| 鄯善县| 马关县| 白水县| 蓝田县| 天水市| 疏附县| 南丹县| 湘乡市| 东丰县| 呼图壁县| 乌鲁木齐市| 剑川县| 颍上县| 墨脱县|