Linux
如何搜尋包含數千個文件的大目錄?
文件夾下
/grid/sdh/hadoop/yarn/local/usercache/hdfs/appcache
我們有 100 多個遞歸文件夾。
其中一個文件夾包含數千個文件。是否可以辨識此文件夾?
我問是因為這個文件夾包含數千個文件,我們可能會遇到一個問題,即我們無法刪除那裡的文件,因為有數千個文件。
目錄中的項目數可以使用
set -- *
這會將位置參數(
$1
、$2
等)設置為目前目錄中的名稱。*
擴展至的名稱數量可在 中找到$#
。如果您使用bash
shell 並設置dotglob
shell 選項,這將額外計算隱藏名稱。使用它來查找
/grid/sdh/hadoop/yarn/local/usercache/hdfs/appcache
包含超過 1000 個名稱的目錄:find /grid/sdh/hadoop/yarn/local/usercache/hdfs/appcache \ -type d -exec bash -O dotglob -c ' for pathname do set -- "$pathname"/* if [ "$#" -gt 1000 ]; then printf "%d\t%s\n" "$#" "$pathname" fi done' bash {} +
這會擴展
*
每個找到的目錄中的 shell glob,如果目錄中的名稱超過 1000 個,則輸出目錄的路徑名以及名稱的數量。它通過bash
為成批的目錄執行一個簡短的腳本來做到這一點。該腳本將遍歷每批目錄,並且對於每個目錄,它將擴展其中的*
glob 以計算條目數。如果合適,則觸發一個if
語句。printf
請注意,如果一個目錄包含數百萬個名稱,則實際擴展該
*
目錄中的 glob 可能需要一些時間。