2014-12-05 3 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 и, следовательно, не будет хорошей проверкой на доступное пространство, поскольку будут скопированы только новые файлы и измененные файлы. Есть ли лучший способ сделать такую ​​проверку?

Edit: доля имеет предельный размер 50gb, но я не уверен, как я мог бы использовать это, если Rsync Isnt копируя все, что

Благодарности

+2

Используйте аргумент '--dry-run' для' rsync', чтобы узнать, что он действительно перенесет, а затем вычислить размеры этих файлов? (Хотя это, вероятно, несколько дороже.) –

ответ

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

+0

Синтаксически, но он не отвечает на заданный вопрос. –

+0

Это другое, потому что -h вызывать команду сортировки для отображения размера с разными ** 1024: GB, MB, KB и т. Д. –

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 –

+0

Натан, помните, что фактически передается только инкрементные изменения в файл. Размер инкрементной передачи не предоставляется rsync в любой форме. То, что я захватил по сценарию, - это размер, о котором сообщает 'du -hs' (человеко-читаемое резюме). Вы можете изменить опцию 'du', чтобы она отображала общие байты вместо' K, M, G, ... ' –

+0

. Каков размер сообщения о долге? Размер, который будет передан или что именно он вычисляет? –

Смежные вопросы