2015-10-19 44 views
0

我已将以下内容与其他一些文章放在一起,但它似乎不起作用。我最终要做的是检查目录大小,然后如果目录有新的内容超过一定的总大小,它会让我知道。Bash脚本编制希望查找目录的大小,如果大小大于x,则执行任务

#!/bin/bash 
file=private/videos/tv 
minimumsize=2 
actualsize=$(du -m "$file" | cut -f 1) 
if [ $actualsize -ge $minimumsize ]; then 
     echo "nothing here to see" 
else 
     echo "time to sync" 
fi 

this is the output: 
./sync.sh: line 5: [: too many arguments 
time to sync 

我是新来的bash脚本,所以提前谢谢你。

+0

向du命令添加选项'-s'。 – Cyrus

+1

通过打印来查看实际大小的价值。 'echo“$ actualsize”' –

+0

或者'echo $(du -m“$ file”)' –

回答

0

错误:

[: too many arguments 

似乎表明,无论是$actualsize$minimumsize扩大到多个参数。

如下更改脚本:

#!/bin/bash 
set -x           # Add this line. 
file=private/videos/tv 
minimumsize=2 
actualsize=$(du -m "$file" | cut -f 1) 
echo "[$actualsize] [$minimumsize]"    # Add this line. 
if [ $actualsize -ge $minimumsize ]; then 
     echo "nothing here to see" 
else 
     echo "time to sync" 
fi 

set -x将尝试执行之前呼应的命令,一些与调试协助大大

echo "[$actualsize] [$minimumsize]"将帮助尝试确定这些变量是否格式不正确,在试图比较之前。

如果,你会毫无疑问发现,一些参数会导致很多来自du -m命令的输出,因为它下降到子目录并为您提供多行输出。

如果你想为聚合的所有子目录线路输出,你必须使用-s标志,以及:

actualsize=$(du -ms "$file" | cut -f 1) 

相反,如果你不希望任何考虑子目录帐户,您可以采取稍微不同的方法,将深度限制为1并合计所有尺寸:

actualsize=$(find . -maxdepth 1 -type f -print0 | xargs -0 ls -al | awk '{s += $6} END {print int(s/1024/1024)}') 
+0

因此,我认为发生的事情是获取每个子文件夹的所有大小,并将它们转换为参数。任何有关如何仅仅定位父目录和状态(如果超过2M)然后执行X的想法 – Nixnix