0

いくつかの UNIX コマンドを適用する Perl ラッパーを作成し、出力をログ ファイルに書き込みました。ただし、空のファイルが作成されているのを見ていますが、作成されているファイルの一部が0サイズではなく、代わりに1バイトと表示されています。したがって、いくつかの後処理のために「if (-s "file") do something else do other thing」を使用する際に問題があります。私のコードが空の行を作成している理由を誰かが助けることができますか (私はすでにそこにチョップを配置していますが)、その空の行を削除して、データがない場合に出力ログ ファイルが常に 0 バイトになるようにする方法はありますか? unix コマンドの処理後にキャプチャされますか? または、このような場合にファイルが空でないかどうかを確認する効果的な方法を提案できますか。

sub sub_unaccessfiles {
    my ($disk) = @_ ;
    @disk_sorted = split (/\s+/, $disk) ;
    $disk_Name = $disk_sorted[4] ;
    my $aging_disk = basename ($disk_Name) ;
    open (OUT3, ">./diskmonitor_logs/char_disks/aging_files_$aging_disk") || die "Cannot create ./diskmonitor_logs/char_disks/aging_files_$aging_disk: $!\n" ;
    my $cmd_aging_grab = `find $disk_Name -type f -name .snapshot -prune -o -atime +180 -printf '%u\t%s\t%t\t%p\n'` ;  
    chomp $cmd_aging_grab ;
    print OUT3 "$cmd_aging_grab\n" ;
    close OUT3 ;
       ..
       ..
}
4

3 に答える 3

5

あなたの印刷ライン:

print OUT3 "$cmd_aging_grab\n" ;

$cmd_aging_grab の内容が空であっても、「\n」が含まれています - 毎回空白行が発生します

于 2012-08-16T14:38:09.613 に答える
1

\n出力ファイルへの書き込み時に を削除します。

于 2012-08-16T14:37:39.260 に答える
0

試す:

print OUT3 "$cmd_aging_grab\n" if $cmd_aging_grab =~ /\S/;
于 2012-08-16T14:48:21.620 に答える