列出特定目录中前 20 个最大的文件

列出特定目录中前 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

等等。我尝试过以下问题的解决方案:

我也尝试遵循本教程:

答案1

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

答案2

zshshell 中,通配符模式

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

将扩展到目录中或目录下 20 个最大文件的路径名/dir(也考虑隐藏名称并忽略符号链接文件)。

glob 限定符的各个部分(.DOL[1,20])意味着:

  • .:仅考虑常规文件。
  • Ddotglob:还要考虑具有隐藏名称的文件(如in的效果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])

相关内容