0

ネットワーク ボリュームをチェックし、それをローカル コピーと比較して、ファイルをコピーするのに十分なスペースがあるかどうかを確認するスクリプトを作成しようとしています。

ファイルはrsyncを使用してコピーされ、次を使用して利用可能なスペースを取得します

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

もし私がするなら

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

その後、最初のバックアップでは機能する可能性がありますが、これは rsync を使用して 1 日に 1 回実行されるため、新しいファイルと変更されたファイルのみがコピーされるため、使用可能なスペースの適切なチェックにはなりません。この種のチェックを行うためのより良い方法はありますか?

編集:共有には50GBのサイズ制限がありますが、rsyncがすべてをコピーしていない場合、これをどのように使用できるかわかりません

ありがとう

4

2 に答える 2

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の命題を検討してください。

于 2014-12-05T17:08:01.890 に答える
1

送信される新しいファイルまたは変更されたファイルの合計サイズを把握する方法があります。ただし、これは、宛先ホストに既に存在する場合に転送される各ファイルの増分部分を計算する前です。リモート ロケーションを更新するために実際に転送される増分サイズを取得する方法はありません。このコードは、長いワンライナーですが、ワンライナーとして使用できます。新しい/変更されたファイルのサイズを知ることが計算に役立つかどうかを確認してください。rsyncrsync

注:コマンド内のファイルは、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

これは、新規/変更されたファイルがリモート ストレージに追加する最大容量の外部概算として使用できます。

于 2014-12-05T18:02:09.853 に答える