Files

列出特定目錄中最大的 20 個文件

  • November 20, 2019

我正在嘗試在特定目錄中顯示前 20 個最大的文件。我想包括所有子目錄,但不包括實際目錄本身。(我只想要文件。)我一直在嘗試找到一種方法來做到這一點,而我在網上找到的所有解決方案都不適用於我正在使用的 Unix 版本。

到目前為止我有這個:

find /dir -type f -exec ls -al {} \; | sort -nr | head -n 20 du -a -g /dir/ | sort -n -r | head -n 20

拳頭給了我一個清單如下:

file1.txt
file1.txt
file1.txt
file2.txt

等等。第二個命令給了我以下資訊:

500    \path\
250    \path\to\
100    \path\to\directory\

等等。我正在尋找的結果是:

500    \path\file1.txt
250    \path\to\file2.txt
100    \path\to\directory\file3.txt

等等。我已經嘗試了以下問題的解決方案:

我也嘗試過遵循本教程:

find dir/ -type f -exec du -a {} + | sort -nr | head -n 20

zshshell 中,globbing 模式

/dir/**/*(.DOL[1,20])

將擴展為目錄中或目錄下 20 個最大文件的路徑名/dir(同時考慮隱藏名稱並忽略符號連結文件)。

glob 限定詞的各個部分(.DOL[1,20])意味著:

  • .: 只考慮正常文件。
  • D:還要考慮具有隱藏名稱的文件(如dotglobin的效果bash)。
  • OL: 按文件大小降序排列結果(O= 降序,而不是o= 升序;L= “長度”)。
  • [1,20]:返回 glob 擴展為的第 20 個元素。

**模式匹配“遞歸”,因此/dir/**/*它本身將匹配目錄中或/dir目錄下的任何名稱。

將此與ls

ls -l -f /dir/**/*(.DOL[1,20])

您必須使用-fwithls來阻止它對顯示的列表進行排序。

或者,呼叫du文件:

du /dir/**/*(.DOL[1,20])

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