繁体   English   中英

如何在Shell脚本中使用文件和目录的大小进行算术运算

[英]how to do arithmetic operations with the size of the files and directory in shell scripting

当文件和目录的大小不同时如何对文件和目录的大小进行算术运算,例如可用空间以MB为单位,文件大小以GB为单位

通过一个准备性命令,我可以获取MB中“ / home / abc / def”目录的大小。 它的容量为30GB,因此获得KB并不是一个好主意。

mount            fssizeMB  
=====            =======  
/home/abc/def    30002    

root@abc:/home/abc/def> ls -lrth 
total 7.0G 
drwxrwxrwx  3 root root   114 Oct 29  2012 file1  
drwxr-xr-x  3 root root   103 Nov 22  2012 file2  
-rw-r--r--  1 root root   114 Jan 25  2013 file3  
-rw-r--r--  1 mtc  users 3.8G Jul 22 03:02 file4 <------------------- concerned file  
-rw-r--r--  1 mtc  users 3.2G Jul 24 22:26 file5  
-rw-r--r--  1 root root     0 Jan  5 20:30 file6  

如何在脚本中转换以下逻辑:

如果文件4的文件大小的两倍小于</ home / abc / def的可用空间,则回显成功或失败。

您可以使用statdu -Sh来获取文件的大小(在脚本中不要使用ls )。

并浏览文件夹的文件:

for i in <direcory>/*; do ...; done

然后,您可以使用test[命令(或[[如果使用Bash的话])进行比较(使用-ge-gt-lt-le选项作为算术运算符)。

请参阅每个命令的手册页以获取更多信息。

这将与百分比一起使用,只是为了给您一个想法,您可以对其进行修改以处理MB或GB等。

我的建议:在bash中进行算术运算不是一个好主意,您应该使用处理特殊变量数据类型(例如float或str等)的编程语言。 bash比较简单,在算术运算中效果不佳。 确保它能执行+和-,但是涉及百分比和浮动...不太好。 尝试使用python或perl,或尝试研究其他内容。 并按照上面的建议绝对使用du -sh

#!/usr/bin/env bash
#take df -h and iterate trough percentages
#check to see if file system is full more than 80 %
perc="$(df -h | awk '{print $5}'| sed -e 's/[%/ a-z/A-Z].*//g' )"

#echo $perc

for p in $perc
do 
     if [ $p -gt 30  ]  #change 30 to whatever
        then
        df -h | grep $p
        echo -e "$p Exceeded on `hostname`"
     fi 
done

大多数命令都有使用特定单位显示大小的选项。

lsdf-h标志将产生“人类可读”格式,该格式不适合算术计算,因为它们的单位可能不一致。

要获取文件的大小,请使用stat甚至wc -c 解析ls -l的输出是一个不好的做法,所以不要使用它。

如果可以始终以千字节为单位获取文件大小,以字节为单位始终获取可用空间大小,这不是问题,则只需将以字节为单位的大小乘以1024,就可以以一致的单位进行比较。

具体使用的命令和标志取决于您的操作系统和安装的软件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM