如何列出n个最大目录中的文件?

bam*_*uni 6 filesystem command-line

我有兴趣在当前目录中找到 n 个最大的子目录(例如 3),然后列出它们中的所有文件。我对查找最大的文件不感兴趣。我知道有很多解决方案可以找到最大的文件,但这不是我想要的。

我找到了我的 3 个最大的子目录:

$ du -hs */ | sort -rh | head -3
Run Code Online (Sandbox Code Playgroud)

结果:

212K    04/
52K     02/
20K     03/
Run Code Online (Sandbox Code Playgroud)

但不知何故,我无法列出这些目录中的文件(使用ls管道不起作用)。任何建议如何做到这一点?

Arr*_*cal 6

您可以在 while 循环中使用管道命令的结果:

du -hs */ | sort -rh | head -3 | while read -r size dir 
do
   ls -l "$dir"
done
Run Code Online (Sandbox Code Playgroud)

作为一个班轮:

du -hs */ | sort -rh | head -3 | while read -r size dir ; do ls -l "$dir"; done
Run Code Online (Sandbox Code Playgroud)

感谢steeldriver建议使用readin a whileloop over a forloop using awk, 以更健壮的方式处理带有空格和特殊字符的文件名。

  • 或者 `cut -f 2` 而不是 `awk '{print $2}'`。 (2认同)
  • ...或`du -hs */ | 排序 -rh | 头-3 | while read -r size dir; do ls -l "$dir"; done` 如果目录名称碰巧包含空格,则不会中断 (2认同)