perlでディレクトリ配下のファイル数、合計サイズを出力

もっとスッキリさせたい

#!/usr/bin/perl

my $size = 0;
my $sizek = 0;
my $sizem = 0;
my @du;
my $dusizek = 0;
my $dusizem = 0;
my $count = 0;
my $sec;
my $min;
my $hour;
my $mday;
my $mon;
my $year;

open( IN, "ls -ltr $ARGV[0] |");
@INPUT_ARG = <IN>;
close(IN);

foreach $INPUT_ARG_TMP (@INPUT_ARG) {
	chomp ($INPUT_ARG_TMP);
	@RESULT_LIST = split(/\s+/,$INPUT_ARG_TMP);
	$size += $RESULT_LIST[4];
	$count++;
}

($sec,$min,$hour,$mday,$mon,$year) = (localtime(time))[0..5];
$year += 1900;
$mon += 1;

@du = split(/\s+/,`du -ksS $ARGV[0]`);
$dusizek = @du[0];

print "DATA			: ", "$year-$mon-$mday $hour:$min:$sec\n";
print "PATH			: ", $ARGV[0], "\n";
print "DIR SIZE [ls - KB]	: ", $size = &SIZE_CONV(KB), "\n";
print "DIR SIZE [du - KB]	: ", $dusizek = @du[0], "\n";
print "DIR SIZE [ls - MB]	: ", $size = &SIZE_CONV(MB), "\n";
print "DIR SIZE [du - MB]	: ", $dusizem = @du[0] / 1024, "\n";
print "FILE COUNT		: ", $count, "\n";
print "----------------\n";

sub SIZE_CONV {
	my ($arg) = @_;
	my ($return) = 0;
	
	if ( "KB" eq $arg) {
		$return = ($size / 1024) ;
	} elsif ( "MB" eq $arg ) {
		$return = (($size / 1024) / 1024) ;
	}
	return $return;
}

wafl.maxdir file size

NetAppをnfsでマウントしている領域で「File too large」。
touchでファイル作っても「File too large」。
1ディレクトリ内のファイル数上限を超えた...?
2,221,918以上作れない。

根拠となる仕様や式が見つからないので、前述のtouchでexitコード1が戻るまでループしたらやっぱり2,221,918以上作れない。

見つけました根拠。

参考:http://ompnix.blogspot.jp/2011/09/waflmaxdir-file-size.html


NetApp搭載メモリ:16G

(16777216 * 1%) * 128 / 4 = 5368709.12

cifsも有効となっているのでそれも加味しました。
((16777216 * 1%) * 128 / 4 ) * 41.3%= 2217276.86656

2,221,918 ≒ 2,217,276

精密に計算するともっと近くなると思います。

対話型シェルスクリプトのデフォルト設定

対話型シェルスクリプトを作り、隣の人にレビューしてもらいました。 レビュー前後でこう変わりました。

レビュー前

echo -n "please input targets_arg1 (default = HOGE) : "
read ARG1
if [ -z $ARG1 ]; then
        ARG1=HOGE
fi

レビュー後

echo -n "please input targets_arg1 (default = HOGE) : "
read INPUT_ARG1
ARG1=${INPUT_ARG1:-"HOGE"}


変数が1個増えますがif文が減ります。 保守性など考えなかったら個人的にはレビュー後の形が好きです。

:-


「:」の後ろは幾つかあるので勉強しよう。

 

参考

ヌルコマンドでシェルスクリプトの変数が空の場合に特定の値を代入させる | 俺的備忘録 〜なんかいろいろ〜