2015-10-19 95 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