如何在bash中从大量文件中快速递归找到最大的文件

如何在bash中从大量文件中快速递归找到最大的文件,bash,shell,Bash,Shell,我在ssh连接的服务器上有很多日志和文件。像所有的原木一样,它们也在生长。我喜欢监视这一点,但目前我只知道磁盘已满并执行以下命令 sudo du -sh * #dirs in this dir filesizes ls -l --sort=size | head -10 #10 biggest files in dir find . -type f -exec du -b {} + | sort -nr | head -n 1 找出导致问题的文件并解决它。它很慢而且是手动的,或者我有像这样的

我在ssh连接的服务器上有很多日志和文件。像所有的原木一样,它们也在生长。我喜欢监视这一点,但目前我只知道磁盘已满并执行以下命令

sudo du -sh * #dirs in this dir filesizes
ls -l --sort=size | head -10 #10 biggest files in dir
find . -type f -exec du -b {} + | sort -nr | head -n 1
找出导致问题的文件并解决它。它很慢而且是手动的,或者我有像这样的命令

sudo du -sh * #dirs in this dir filesizes
ls -l --sort=size | head -10 #10 biggest files in dir
find . -type f -exec du -b {} + | sort -nr | head -n 1
它会遍历每个文件,其中有很多文件,因此耗时太长。通常情况下,问题是只有几个文件比文件系统中的任何文件都大得多

解决方案不必是一行程序,甚至可以是一个shell脚本等。任何快速完成任务的方法都会很有帮助,比如查找所有超过大小阈值的文件也是一个合理的选择


最重要的要求:它工作迅速。

du
是你的朋友

$: du $baseDir | sort -rn | head -$worstOffenders

您可能需要一个
sudo
在该
du

上,也许查找超过大小阈值的所有文件也是一个合理的选择。非常好的主意,你试过了吗?“有很多”多少?试着使用
logrotate
@performallynotfini:所需的时间是每个脚本至少需要查看每个文件以确定其大小。即使是
du-s
也需要这样做。如果您感兴趣的文件只有日志文件,您可以为它们制定命名约定。例如,我们在项目中使用扩展名
.log
。因此,
find
只需扫描目录并选择具有此扩展名的文件进行更仔细的调查。@performallynotfini:另一种方法——如果这在您的应用程序中可行的话——是将负担放在实际生成这些文件的程序中。也许它可以用它生成的文件的信息更新某种中央数据存储库,还可以粗略估计写入的日志条目的数量。然后你只需要扫描这个“数据库”来寻找感兴趣的文件。