2014-12-05 35 views
0

我想腳本檢查網絡卷,並與本地副本進行比較,看看是否有足夠的空間來複制文件。Bash腳本來檢查網絡卷存儲

的文件將複製使用rsync,我使用以下方法來獲取可用空間

VAR1=`du -sh /Volumes/networkshare/user` 
VAR2=`du -sh /Users/user1/` 

如果我是做一個

if [ $VAR1 -lt $VAR2 ] 
then echo "Enough Space" 
fi 

然後可能工作的最初備份,但這將使用rsync每天運行一次,因此不會很好地檢查可用空間,因爲只有新文件和更改的文件會被複制。有沒有更好的方法來做這種檢查?

編輯:股有50GB的大小限制,但我不確定我如何使用這個如果rsync的心不是將所有內容複製

感謝

+2

對'rsync'使用'--dry-run'參數來找出它將實際傳輸的內容,然後計算這些文件的大小? (雖然這可能有點貴)。 – 2014-12-05 17:08:45

回答

1

嘗試這樣做:如果你

#!/bin/bash 

var1=$(du -s /Volumes/networkshare/user | cut -f1) 
var2=$(du -s /Users/user1/ | cut -f1) 

if ((var1 < var2)); then 
    ... 
fi 

想要總結案例2(增量)所需的大小,請考慮Etan Reisner的提議在您的帖子下方。

+0

這與原來的有何不同? – Joe 2014-12-05 17:08:42

+0

在句法上,它不回答問題。 – 2014-12-05 17:09:10

+0

這是不同的,因爲-h導致排序命令可能顯示不同的大小** 1024:GB,MB,KB等 – 2014-12-05 17:10:58

1

有一種方法來感受爲總規模新的或修改過的文件將發送的。但是,這是在rsync之前,計算將在目標主機上存在的每個文件的一部分的增量部分。沒有辦法獲得增量大小rsync將實際傳輸到更新遠程位置。此代碼可用作單行,儘管長單行。看一看,看看新/更改文件的大小是否有助於您的計算。

注:rsync命令文件只是舉例:

rsync -uavn ~/cnf/data nirvana:~/cnf > /tmp/rfn      # list of files 
lns=$(cat /tmp/rfn | wc -l)           # line count 
xsize=$(tail -n$((lns - 2)) /tmp/rfn | head -n$((lns - 5)) | du -hs) # isolate files & du 
printf "\n You will transfer files totaling : %s\n\n" "${xsize%[^A-Za-z0-9]*}" 
rm /tmp/rfn               # remove tmp file 

例如:

$ bash chksz.sh 

You will transfer files totaling : 8.0M 

這可以作爲最大空間的外部逼近新的/已更改的文件將添加到遠程存儲。

+0

感謝您的腳本。我已經實現了它,但它似乎並沒有給我準確的計算將要傳輸的內容,因爲如果我將更多的文件添加到目錄中,估計的大小永遠不會增加超過292k – 2014-12-12 17:00:36

+0

Nathan,請記住,實際傳輸的內容只是對文件。增量傳輸的大小不能以任何形式由rsync提供。我通過腳本捕捉到的是'du -hs'(人類可讀的摘要)報告的大小。您可以更改'du'選項,使其顯示總字節數,而不是'K,M,G ......' – 2014-12-12 20:37:28

+0

責任報告的大小是多少?將要轉移的大小還是計算的是什麼? – 2014-12-13 22:03:28