Files
列出特定目錄中最大的 20 個文件
我正在嘗試在特定目錄中顯示前 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
等等。我已經嘗試了以下問題的解決方案:
- 遞歸查找最大文件
- https://stackoverflow.com/questions/12522269/how-to-find-the-largest-file-in-a-directory-and-its-subdirectories
我也嘗試過遵循本教程:
find dir/ -type f -exec du -a {} + | sort -nr | head -n 20
在
zsh
shell 中,globbing 模式/dir/**/*(.DOL[1,20])
將擴展為目錄中或目錄下 20 個最大文件的路徑名
/dir
(同時考慮隱藏名稱並忽略符號連結文件)。glob 限定詞的各個部分
(.DOL[1,20])
意味著:
.
: 只考慮正常文件。D
:還要考慮具有隱藏名稱的文件(如dotglob
in的效果bash
)。OL
: 按文件大小降序排列結果(O
= 降序,而不是o
= 升序;L
= “長度”)。[1,20]
:返回 glob 擴展為的第 20 個元素。該
**
模式匹配“遞歸”,因此/dir/**/*
它本身將匹配目錄中或/dir
目錄下的任何名稱。將此與
ls
:ls -l -f /dir/**/*(.DOL[1,20])
您必須使用
-f
withls
來阻止它對顯示的列表進行排序。或者,呼叫
du
文件:du /dir/**/*(.DOL[1,20])