- 一、建立百萬級小檔案
- 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.data
、2.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
3.2、多核的併發執行
time seq 1000 |xargs -i -P 4 dd if=/dev/urandom of={}.data bs=1024 count=1 &> /dev/null
二、如何列出/瀏覽這些檔案
1、檢視目錄下檔案的數量
ls | wc -l
2、列出?
一般情況下我們會直接使用ls
進行列出處理
ls
但是不難看出鍵入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
4、透過重定向匯入到檔案中瀏覽對應的檔名
ls -1 -f > /tmp/filelist.txt
-1:一行一個檔名
-f:關閉排序功能
透過less、more、vim等工具進行瀏覽和搜尋
三、如何快速刪除目錄下所有檔案
1、rm -f ./* ?
rm -rf ./*
很顯然,rm的引數列表過長,無法執行rm命令
2、將整個目錄名作為引數傳遞給rm命令
rm -rf test
3、使用find配合-delete引數
find /test/ -mindepth 1 -delete
這條命令會從指定目錄開始,查詢所有非目錄項(即檔案)並刪除它們。
-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
3.1、命令詳解
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/