0

我正在尝试编写脚本检查网络卷并将其与本地副本进行比较,以查看是否有足够的空间来复制文件。

文件将使用 rsync 复制,我使用以下内容获取可用空间

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

如果我要做一个

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

然后这可能适用于初始备份,但这将使用 rsync 每天运行一次,因此不会很好地检查可用空间,因为只会复制新文件和更改的文件。有没有更好的方法来做这种检查?

编辑:共享的大小限制为 50gb,但如果 rsync 没有复制所有内容,我不确定如何使用它

谢谢

4

2 回答 2

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 回答
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 回答