技术提示:查找超过特定大小的目录
发表于 2009 年 11 月 17 日
使用诸如以下的命令在您的系统中查找大文件相当简单find但是,如果您正在寻找超过特定大小的目录findfind 将无济于事。 这里提供的 Perl 脚本可以帮助您追踪那些爆炸性的大目录。
该脚本打印出给定路径下大小超过某个阈值的目录。 它还允许您排除与特定模式匹配的目录。 该命令接受以下选项
- -d - 指定要搜索的基本目录。
- -t - 以兆字节为单位指定阈值(例如 100 == 100MB)。
- -x - 指定要忽略的模式(glob 模式)。
以下示例显示了如何使用它
$ ./file.pl -d ../../ -t 100 -x '{pr*,jd*,tp*,sim*}'
165,/export/home/fengd/CMS/apache-tomcat-6.0.13/logs
274,/export/home/fengd/CMS/apache-tomcat-6.0.13
318,/export/home/fengd/CMS
400,/export/home/fengd/apache-tomcat-6.0.13/bin
417,/export/home/fengd/apache-tomcat-6.0.13
909,/export/home/fengd
909,total
$ ./file.pl -d ../../ -t 100 -x simulator*
178,/export/home/fengd/CMS/apache-tomcat-6.0.13/logs
289,/export/home/fengd/CMS/apache-tomcat-6.0.13
333,/export/home/fengd/CMS
400,/export/home/fengd/apache-tomcat-6.0.13/bin
422,/export/home/fengd/apache-tomcat-6.0.13
757,/export/home/fengd/project/cpp/fileTrans
766,/export/home/fengd/project/cpp
334,/export/home/fengd/project/log/tmp
492,/export/home/fengd/project/log
391,/export/home/fengd/project/store/array
391,/export/home/fengd/project/store
1755,/export/home/fengd/project
133,/export/home/fengd/tptp/config
200,/export/home/fengd/tptp
105,/export/home/fengd/jdk
2994,/export/home/fengd
2994,total
以下是该命令的源代码
#!/usr/bin/perl -w
use Getopt::Std;
use Cwd 'abs_path';
my %dir;
getopt("dtx",\%dir);
if(!defined $dir{d}){
print "Usage: program -d dir [-t threshhold] [-x exclude pattern]\n";
exit 1;
}
if(!defined $dir{t}){
$dir{t}=1000;
}
my $f=abs_path($dir{d});
my $cmd="du -m -c $f";
if(defined $dir{x}){
$cmd=$cmd." --exclude=$dir{x}";
}
my $line=`$cmd`;
while($line=~/(\d+)\s+([^\r\n]+)\r?\n/g){
if($1>$dir{t}){
print $1.",".$2."\n";
}
}
该脚本使用du命令来获取大小信息。 排除模式直接传递给du命令。 然后它处理来自du的输出,并打印出那些大于阈值的目录。