Linux

如何搜尋包含數千個文件的大目錄?

  • March 26, 2019

文件夾下

/grid/sdh/hadoop/yarn/local/usercache/hdfs/appcache

我們有 100 多個遞歸文件夾。

其中一個文件夾包含數千個文件。是否可以辨識此文件夾?

我問是因為這個文件夾包含數千個文件,我們可能會遇到一個問題,即我們無法刪除那裡的文件,因為有數千個文件。

目錄中的項目數可以使用

set -- *

這會將位置參數($1$2等)設置為目前目錄中的名稱。*擴展至的名稱數量可在 中找到$#。如果您使用bashshell 並設置dotglobshell 選項,這將額外計算隱藏名稱。

使用它來查找/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 可能需要一些時間。

引用自:https://unix.stackexchange.com/questions/508658