Linux 如何在shell脚本中对文件和目录的大小进行算术运算
当文件和目录位于不同的单位(如可用空间以MB为单位,文件大小以GB为单位)时,如何对其大小进行算术运算 通过一个预备命令,我可以获取“/home/abc/def”目录的大小(MB)。它是30GB,所以输入KB不是一个好主意Linux 如何在shell脚本中对文件和目录的大小进行算术运算,linux,bash,shell,sed,awk,Linux,Bash,Shell,Sed,Awk,当文件和目录位于不同的单位(如可用空间以MB为单位,文件大小以GB为单位)时,如何对其大小进行算术运算 通过一个预备命令,我可以获取“/home/abc/def”目录的大小(MB)。它是30GB,所以输入KB不是一个好主意 mount fssizeMB ===== ======= /home/abc/def 30002 root@abc:/home/abc/def> ls -lrth total 7.0G drwxrw
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
mount fssizeMB
===== =======
/主页/abc/def 30002
root@abc:/home/abc/def>ls-lrth
总共7.0克
DRWXRWX 3根根目录114 2012年10月29日文件1
drwxr-xr-x 3根根目录103 2012年11月22日文件2
-rw-r--r--1根根根114根2013年1月25日文件3
-rw-r--r--1 mtc用户3.8G Jul 22 03:02文件4您可以使用stat
或du-Sh
获取文件大小(不要在脚本中使用ls
)
和浏览文件夹的文件:
for i in <direcory>/*; do ...; done
用于i in/*;做完成
然后,您可以使用test
或[
命令(或者[[
如果您使用Bash)进行比较(使用-ge
,-gt
,-lt
,-le
选项作为算术运算符)
查看每个命令的手册页以获取更多信息。您可以使用stat
或du-Sh
获取文件大小(不要在脚本中使用ls
)
和浏览文件夹的文件:
for i in <direcory>/*; do ...; done
for i in/*;do…;done
然后,您可以使用test
或[
命令(或者[[
如果您使用Bash)进行比较(使用-ge
,-gt
,-lt
,-le
选项作为算术运算符)
查看每个命令的手册页以获取更多信息。您可以使用stat
或du-Sh
获取文件大小(不要在脚本中使用ls
)
和浏览文件夹的文件:
for i in <direcory>/*; do ...; done
for i in/*;do…;done
然后,您可以使用test
或[
命令(或者[[
如果您使用Bash)进行比较(使用-ge
,-gt
,-lt
,-le
选项作为算术运算符)
查看每个命令的手册页以获取更多信息。您可以使用stat
或du-Sh
获取文件大小(不要在脚本中使用ls
)
和浏览文件夹的文件:
for i in <direcory>/*; do ...; done
for i in/*;do…;done
然后,您可以使用test
或[
命令(或者[[
如果您使用Bash)进行比较(使用-ge
,-gt
,-lt
,-le
选项作为算术运算符)
查看每个命令的手册页以获取更多信息。这将适用于百分比,只是为了给您一个想法,您可以修改它以处理MB或GB等
我的建议是:在bash中进行算术运算不是一个好主意,您应该使用处理特殊变量数据类型的编程语言,如float或str等。bash更简单,并且不能很好地处理算术运算。当然,它可以处理+和-,但当涉及到百分比和float时…就不太好了。
尝试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
这将适用于百分比,只是为了给你一个想法,你可以修改它来处理MB或GB等等
我的建议是:在bash中进行算术运算不是一个好主意,您应该使用处理特殊变量数据类型的编程语言,如float或str等。bash更简单,并且不能很好地处理算术运算。当然,它可以处理+和-,但当涉及到百分比和float时…就不太好了。
尝试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
这将适用于百分比,只是为了给你一个想法,你可以修改它来处理MB或GB等等
我的建议是:在bash中进行算术运算不是一个好主意,您应该使用处理特殊变量数据类型的编程语言,如float或str等。bash更简单,并且不能很好地处理算术运算。当然,它可以处理+和-,但当涉及到百分比和float时…就不太好了。
尝试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
这将适用于百分比,只是为了给你一个想法,你可以修改它来处理MB或GB等等
我的建议是:在bash中进行算术运算不是一个好主意,您应该使用处理特殊变量数据类型的编程语言,如float或str等。bash更简单,并且不能很好地处理算术运算。当然,它可以处理+和-,但当涉及到百分比和float时…就不太好了。
尝试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,以便能够以一致的单位进行比较
要使用的特定命令和标志将取决于您的操作系统和安装的软件。大多数命令都有使用特定标志显示大小的选项