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

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

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

我找到了我的 3 个最大的子目录,其中有以下几行:

$ du -hs */ | sort -rh | head -3

结果:

212K    04/
52K     02/
20K     03/

但不知何故,我无法列出这些目录中的文件(使用管道ls没有用)。有什么建议可以实现吗?

答案1

您可以将管道命令的结果与 while 循环一起使用:

du -hs */ | sort -rh | head -3 | while read -r size dir 
do
   ls -l "$dir"
done

一句话:

du -hs */ | sort -rh | head -3 | while read -r size dir ; do ls -l "$dir"; done

谢谢钢铁司机read建议在循环中使用while而不是for使用循环awk,以更为稳健的方式处理带有空格和特殊字符的文件名。

答案2

命令替换,借助来awk获取前 3 个目录:

ls -l $(du -hs */ | sort -rh | awk 'NR==4{exit} {print $2}')

假设没有目录名包含任何空格或任何不寻常的字符。

健壮的方法:处理任何可能的文件(目录)名称,将目录名称以 NUL 分隔输出awk,并借助于来xargs处理每个目录:

du -0hs */ | sort -zrh | awk 'BEGIN{RS="\0"} NR==4{exit} {printf("%s\0", $2)}' | \
    xargs -0 ls -l

每次查看每个目录的内容:

du -0hs */ | sort -zrh | awk 'BEGIN{RS="\0"} NR==4{exit} {printf("%s\0", $2)}' | \
    xargs -0 -I{} ls -l {}

相关内容