Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在shell脚本中对文件和目录的大小进行算术运算_Linux_Bash_Shell_Sed_Awk - Fatal编程技术网

Linux 如何在shell脚本中对文件和目录的大小进行算术运算

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

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

通过一个预备命令,我可以获取“/home/abc/def”目录的大小(MB)。它是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  
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,以便能够以一致的单位进行比较


要使用的特定命令和标志将取决于您的操作系统和安装的软件。

大多数命令都有使用特定标志显示大小的选项