在unix

时间:2016-04-15 03:31:53

标签: unix

我正在编写一个简单的shell脚本,用于检查目标路径的空间以及该目标路径上每个目录的空间利用率(例如,我正在检查/ path1 / home的空间,并检查所有文件夹的位置/ path1 / home消耗了总空间。)我的问题是关于它产生的输出,它不是令人愉悦的(不均匀的间距)。请参阅下面的示例输出行。

SIZE USER_FOLDER DATE_LAST_MODIFIED
83G FOLDER 1 Apr 15 03:45
34G FOLDER 10 Mar 9 05:02
26G FOLDER 11 Mar 29 13:01
8.2G FOLDER 100 Apr 1 09:42
1.8G FOLDER 101 Apr 11 13:50
1.3G FOLDER 110 Feb 16 09:30

我只是希望输出格式与标题一致,因此它看起来很整洁,因为我会将它用作报告。以下是我为此部分使用的代码。

ls -1 | grep -v "lost+found" |grep -v "email_body.tmp" > $v_path/Users.tmp 
for user in `cat $v_path/Users.tmp | grep -v "Users.tmp"` 
do
    folder_size=`du -sh $user 2>/dev/null` # should be run using a more privileged user so that other folders can be read (2>/dev/null was used to discard error messages i.e. "du: cannot read directory `./marcnad/.gnupg': Permission denied")
    folder_date=`ls -ltr | tr -s " " | cut -f6,7,8,9, -d" " | grep -w $user | cut -f1,2,3, -d" "`
    folder_size="$folder_size               $folder_date"
    echo $folder_size >> $v_path/Users_Usage.tmp 
done

echo "Summary of $v_path Disk Space Utilization per folder." >> email_body.tmp 
echo "" >> email_body.tmp 
echo "SIZE USER_FOLDER DATE_LAST_MODIFIED" >> email_body.tmp

for i in T G M K
do
    cat $v_path/Users_Usage.tmp | grep [0-9]$i | sort -nr -k 1  >> $v_path/email_body.tmp 
done

谢谢! 编辑:格式化

1 个答案:

答案 0 :(得分:0)

打印数据时,请使用printf而不是echo

cat $v_path/Users_Usage.tmp | while read a b c d e f
do
    printf '%-5s%-7%s%-4s%-4s%-3s-6s' $a $b $c $d $e $f
done

请参阅here