[英]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的可用空间,则回显成功或失败。
您可以使用stat
或du -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
大多数命令都有使用特定单位显示大小的选项。
ls
和df
的-h
标志将产生“人类可读”格式,该格式不适合算术计算,因为它们的单位可能不一致。
要获取文件的大小,请使用stat
甚至wc -c
。 解析ls -l
的输出是一个不好的做法,所以不要使用它。
如果可以始终以千字节为单位获取文件大小,以字节为单位始终获取可用空间大小,这不是问题,则只需将以字节为单位的大小乘以1024,就可以以一致的单位进行比较。
具体使用的命令和标志取决于您的操作系统和安装的软件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.