CodingFirst

C言語、Perl、JavaScript、最近はPythonも。出来上がったものより、プログラムを書くことが好き。あと、スイーツ。

スポンサーサイト

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

perlでソート付きのdu

  • このエントリーをはてなブックマークに追加
  • web拍手 by FC2

ファイルをサイズ順にソートして出力するスクリプト。

du.pl /home/*

とかで容量くってるユーザを調べたりする用途に丁度いいかな。
1024バイト単位にしたけど、最近は1000バイト単位の方が一般的?まぁいっか。

#!/usr/bin/env perl
use warnings;
use strict;

die "Usage: $0 dir [dir dir ..]" if ($#ARGV<0);

sub filesize{
  my $s=shift || die "filesize: lack arguments";
  return "${s}B" if($s<10);
  my $i=$s;
  foreach my $a ('B','K','M','G','T','P','E','Z','Y'){
    return sprintf "%3.1f$a",$i if($i<10);
    return sprintf "%d$a",int($i) if($i<1024);
    $i/=1024;
  }
  return $s;
}

sub du{
  my $d=shift;
  my @a=`du -sb $d`;
  my %h;
  foreach (@a){
    my ($l,$n)=split;
    die "Error: $n already exist\n" if($h{$n});
    $h{$n}=$l;
  }
  return %h;
}

my %h=();
while(@ARGV){
  %h=(%h,&du(shift));
}

foreach my $name (sort {$h{$b}<=>$h{$a}} keys %h){
  printf "%5s %-30s\n", &filesize($h{$name}), $name;
}

Unixコマンドの出力をテキスト処理するのはperlで書くのが楽しい。極力モジュールは使わない方がいいな。


«  | HOME | 

Search

Recent Entries

Foot Print



Categories

Monthly

Recent Comments

Recent Trackbacks

Profile

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。